社区讨论
那位dalao能个帮我看一下哪里有问题,一直死循环
P3385【模板】负环参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @ly3rag8p
- 此快照首次捕获于
- 2024/07/02 09:54 2 年前
- 此快照最后确认于
- 2024/07/02 13:00 2 年前
CPP
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int N=1e5+10;
int n,m,t,w[N],e[N],ne[N],h[N],idx,dist[N],vis[N],cnt[N],u,v,x;
void add(int a,int b,int c){
e[idx]=b;
w[idx]=c;
ne[idx]=h[a];
h[a]=idx++;
}
bool spfa(){
memset(dist,0x3f,sizeof dist);
memset(vis,0,sizeof vis);
memset(cnt,0,sizeof cnt);
queue<int>q;
for(int i=1;i<=n;++i){
q.push(i);
vis[i]=1;
}
while(!q.empty()){
int k=q.front();
q.pop();
vis[k]=0;
for(int i=h[k];i!=-1;i=ne[i]){
int j=e[i];
if(dist[j]>dist[k]+w[i]){
dist[j]=dist[k]+w[i];
cnt[j]=cnt[k]+1;
if(cnt[j]>=n){
return true;
}
if(!vis[j]){
q.push(j);
vis[j]=1;
}
}
}
}
return false;
}
int main() {
memset(e,-1,sizeof e);
cin>>t;
while(t--){
memset(e,-1,sizeof e);
cin>>n>>m;
for(int i=1;i<=m;++i){
int a,b,c;
cin>>u>>v>>x;
if(c>=0){
add(u,v,x);
add(v,u,x);
}else{
add(u,v,x);
}
}
if(spfa()) cout<<"YES";
else cout<<"NO";
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...