社区讨论

【悬关】SPFA 模版 TLE 40pts 求条

学术版参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mivsv1pu
此快照首次捕获于
2025/12/07 22:10
3 个月前
此快照最后确认于
2025/12/10 23:05
3 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;

int n, m, s;
struct Edge
{
    int v, w;
};
vector<Edge> e[10005];
int u, v, w;

int vis[10005];
int dis[10005];
int cnt[10005];

void spfa()
{
    queue<int> q;
	for(int i = 1; i <= n; i++)
        dis[i] = 2147483647;
    dis[s] = 0, vis[s] = 1;
    q.push(s);
    while(q.size())
    {
        auto f = q.front();
        q.pop();
        vis[f] = 0;
        for(auto [i, j] : e[f])
        {
            if(dis[i] > dis[f] + j)
            {
                dis[i] = dis[f] + j;
                cnt[i] = cnt[f] + 1;
                if(cnt[i] >= n) return;
              	if(!vis[i]) q.push(i), vis[i] = 1;
            }
        }
    }
    
}
signed main()
{
	cin >> n >> m >> s;
    for(int i = 1; i <= m; i++)
        cin >> u >> v >> w,
    	e[u].push_back({v, w}),
    	
    spfa();

    for(int i = 1; i <= n; i++)
        cout << dis[i] << ' ';
    
    return 0;
}
模板题:P3371

回复

6 条回复,欢迎继续交流。

正在加载回复...