求调
查看原帖
求调
678070
ykzzldz楼主2022/8/29 11:59

貌似只会输出 NO

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <map>
using namespace std;
struct edge{
	int v,w;
	edge(int _v=0,int _w=0){
		v=_v;
		w=_w;
	}
};
vector<edge>e[11100];
int dis[11100],vis[11100],cnt[11100];
queue<int>q;
void spfa(int n,int s){
    for(int i=1;i<=n;i++){
    	dis[i]=1e9;
    	cnt[i]=0;
	}
	dis[s]=0;
	vis[s]=1;
	cnt[s]=1;
	q.push(s);
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=1;i<=e[u].size();i++){
			int v=e[u][i].v,w=e[u][i].w;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				if(!vis[v]){
					q.push(v);
					cnt[v]++;
					vis[v]=1;
					if(cnt[v]>n){
						cout<<"YES\n";
						return;
				    }
				}
			}
		}
	}
	cout<<"NO\n";
}
int main(){
    int t,n,m,u,v,w;
    cin>>t;
    while(t--){
    	cin>>n>>m;
    	for(int i=1;i<=m;i++){
    		cin>>u>>v>>w;
    		e[u].push_back(edge(v,m));
    		if(w>=0)e[v].push_back(edge(u,w));
		}
		spfa(n,1);
		for(int j=1;j<=n;j++)e[j].clear();
        while(!q.empty())q.pop();
	}
    return 0;
}
2022/8/29 11:59
加载中...