社区讨论
除了最后一个全wa,vector建图
P5960【模板】差分约束参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lyhhltyf
- 此快照首次捕获于
- 2024/07/12 00:32 2 年前
- 此快照最后确认于
- 2024/07/12 09:41 2 年前
C
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
const int N = 1e4+5,M =1e4+5,mod = 7;
ll n, m;
struct Edge {
ll to, w;
};
vector<Edge> G[N];
ll dis[N], cnt[N];
bool vis[N];
bool spfa(ll s) {
memset(dis, 127, sizeof(dis));
dis[s] = 0;
queue<ll> que;
que.push(s);
vis[s] = 1;
while (que.size()) {
s = que.front();
que.pop();
vis[s] = 0;
for (Edge p :G[s]) {
ll to = p.to, w = p.w;
if (dis[to] > dis[s] +w) {
dis[to] = dis[s] + w;
cnt[to] = cnt[s] + 1;
if (cnt[to]>=n+1)
return false;
if (!vis[to]) {
que.push(to);
vis[s] = 1;
}
}
}
}
return true;
}
int main()
{
cin >> n >> m;
for (ll i = 1; i <= m;i++) {
ll fr, to, w;
cin >> to >> fr >> w;
G[fr].push_back({to, w});
}
//创建源点
for (ll i = 1; i <= n;i++) {
G[0].push_back({i, 0});
}
if (spfa(0)) {
for (ll i = 1; i <= n;i++) {
cout << dis[i] << " ";
}
}else {
cout << "NO" << endl;
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...