社区讨论
为何错误o(╥﹏╥)o
P5960【模板】差分约束参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lwkn7jpv
- 此快照首次捕获于
- 2024/05/24 20:13 2 年前
- 此快照最后确认于
- 2024/05/24 21:44 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 5e3+10;
int n,m;
struct node{
int to,next,len;
}a[N];
int pre[N],k;
long long d[N];
int vis[N],cnt[N];
void add(int u,int v,int len){
k++;
a[k].to = v;
a[k].next = pre[u];
a[k].len = len;
pre[u] = k;
}
bool spfa(){
queue<int> q;
for(int i = 1;i<=n;i++){
d[i] = INT_MAX;
vis[i] = 0;
}
q.push(0);
d[0] = 0;
vis[0] = 1;
cnt[0] = 1;
while(!q.empty()){
int u = q.front();
q.pop();
vis[u] = 0;
for(int i = pre[u];i;i = a[i].next){
int to = a[i].to;
if(d[to]>d[u]+a[i].len){
d[to] = (long long)d[u]+a[i].len;
if(vis[to]==0){
vis[to] = 1;
q.push(to);
cnt[to]++;
if(cnt[to]>n+1)return false;
}
}
}
}
return true;
}
int main(){
scanf("%d%d",&n,&m);
int x,y,z;
for(int i = 1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
add(y,x,z);
}
for(int i = 1;i<=n;i++){
add(0,i,0);
}
if(spfa()){
for(int i = 1;i<=n;i++){
printf("%d ",d[i]);
}
}else{
printf("NO\n");
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...