#9TLE求助!!!(spfa)
查看原帖
#9TLE求助!!!(spfa)
598641
yangjinghan楼主2023/4/14 21:56
#include<bits/stdc++.h>
using namespace std;
struct node{
	int v,w,next;
}edges[30001];
int head[20001],d[20001],t,n,m,u,v,w,cnt;
bool vis[20001],flag;
inline void add_edge(int u,int v,int w){
	edges[++cnt]=(node){v,w,head[u]};
	head[u]=cnt;
}
inline int read(){
    int x=0;
    bool f=0;
	char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
		x=(x<<3)+(x<<1)+(ch^'0');
		ch=getchar();
	}
    return f?~x+1:x;
}
void dfs_spfa(int u){
    if(flag)return;
    vis[u]=1;
    for(int i=head[u];i;i=edges[i].next){
        int v=edges[i].v;
        if(d[u]+edges[i].w<d[v]){
            d[v]=d[u]+edges[i].w;
            if(vis[v]){
                flag=1;
                return;
            }else dfs_spfa(v);
        }
    }
    vis[u]=0;
}
int main(){
	t=read();
	while(t--){
		n=read(),m=read();
		memset(d,0x3f,sizeof(d));
		memset(vis,0,sizeof(vis));
		memset(head,0,sizeof(head));
		cnt=0;
		flag=0;
		d[1]=0;
		while(m--){
			u=read();v=read();w=read();
			add_edge(u,v,w);
			if(w>=0)add_edge(v,u,w);
		}
		dfs_spfa(1);
		if(flag)printf("YES\n");
		else printf("NO\n");
    }
    return 0;
}
2023/4/14 21:56
加载中...