为啥一入队就莫名RE??
查看原帖
为啥一入队就莫名RE??
121813
老子是北瓜楼主2021/8/12 21:54
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;

int n,m,ans[2003],u,v,w;
bool vis[2003];
queue<int> q;
vector<pair<int,int> > g[2003]; 

int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&n,&m);
		for(int i=1; i<=n; ++i)
			g[i].clear();
		for(int i=1; i<=m; ++i)
		{
			scanf("%d%d%d",&u,&v,&w);
			if(w>0)
				g[u].push_back(make_pair(v,w)),
				g[v].push_back(make_pair(u,w));
			if(w<0)
				g[u].push_back(make_pair(v,w));
		}
		memset(ans,0x3f,sizeof(ans));
		memset(vis,0,sizeof(ans));
		ans[1]=0;
		vis[1]=1;
		q.push(1);
		
		bool flag=0;
		while(!q.empty())
		{
			if(flag) break;
			u = q.front(); //RE在这了
			q.pop();
			vis[u]=0;
			for(int i=0; i<g[u].size(); ++i)
			{
				v=g[u][i].first,w=g[u][i].second;
				if(ans[u] + w < ans[v])
				{
					ans[v]=ans[u]+w;
					if(ans[1] < 0) {
						flag=1;
						break;
					}
					if(!vis[v])
						q.push(v),vis[v]=1;
				}
			}
		}
		if(flag)
			cout<<"Yes"<<endl;
		else
			cout<<"No"<<endl;
	}
	return 0;
}
2021/8/12 21:54
加载中...