社区讨论
挂了第二组第二个点求调
P3385【模板】负环参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhjhycpn
- 此快照首次捕获于
- 2025/11/04 02:52 4 个月前
- 此快照最后确认于
- 2025/11/04 02:52 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
const int inf=0x3f3f3f3f;
struct edge{
int to,nxt,w;
} e[N*2];
int head[N],cnt=0;
void add(int a,int b,int l){
e[cnt].to=b;
e[cnt].w=l;
e[cnt].nxt=head[a];
head[a]=cnt++;
}
int n,m,s;
int vis[N],dis[N];
int ct[N];
void init(){
cnt=0;
memset(head,-1,sizeof(head));
memset(dis,inf,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(ct, 0, sizeof(ct));
}
bool spfa(int s){
queue<int> qu;
// qu.push(s);
dis[s]=0;
// vis[s]=1;
for(int i=1;i<=n;i++){
qu.push(i);
vis[i]=1;
}
while(!qu.empty()){
int u=qu.front();
qu.pop();
vis[u]=0;
for(int i=head[u];i!=-1;i=e[i].nxt){
int v=e[i].to;
int w=e[i].w;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
ct[v]=ct[u]+1;
if(ct[v]>=n) return true;
if(!vis[v]){
vis[v]=1;
qu.push(v);
}
}
}
}
return false;
}
void solve(){
init();
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
if(z>=0) add(y,x,z);
}
s=1;
if(spfa(s)) cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...