求助,已清空数组仍然不过T_T
查看原帖
求助,已清空数组仍然不过T_T
374351
olofme1ster楼主2022/9/6 17:34
#include<bits/stdc++.h>
using namespace std;
const int MAXN=10005;
struct Edge{
	int v,val;
};
vector<Edge> a[MAXN];
int n,m,s,cnt[MAXN],dis[MAXN],t;
bool vis[MAXN];
queue<int> q;
bool spfa(){
	for(int i=1;i<=n;i++){
		dis[i]=INT_MAX;
		cnt[i]=0;
	}
	dis[s]=0;
	vis[s]=true;
	q.push(s);
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=false;
		for(int i=0;i<a[u].size();i++){
			int v=a[u][i].v,val=a[u][i].val;
			if(dis[v]>dis[u]+val){
				dis[v]=dis[u]+val;
				cnt[v]=cnt[u]+1;
				if(cnt[v]>=n)
					return false;
				if(!vis[v]){
					q.push(v);
					vis[v]=true;
				}
			}
		}
	}
	return true;
}
int main(){
	s=1;
	scanf("%d",&t);
	for(int p=1;p<=t;p++){	
		while(!q.empty())
			q.pop();
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;i++)
			a[i].clear();
		for(int i=1;i<=m;i++){
			int u,v,w;
			scanf("%d%d%d",&u,&v,&w);
			Edge t;
			if(w>=0){
				t.v=v;
				t.val=w;
				a[u].push_back(t);
				t.v=u;
				a[v].push_back(t);
			}
			else{
				t.v=v;
				t.val=w;
				a[u].push_back(t);
			}
		}
		bool yes=spfa();
		if(yes)
			printf("NO\n");
		else
			printf("YES\n");
	}
	return 0;
} 
2022/9/6 17:34
加载中...