蒟蒻只拿了11分捏,求助捏
查看原帖
蒟蒻只拿了11分捏,求助捏
247173
木易、楼主2022/10/15 23:16
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
inline int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		{
			w=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*w;
}
int w;
int n,m;
vector <int> a[1005];
vector <int> b[1005];
int vis[1005],dis[1005],cnt[1005];
bool spfa(int c)
{
	queue <int> q;
	fill(dis,dis+n+1,-1e9);
	q.push(c);
	vis[c]=1;
	dis[c]=0;
	cnt[c]++;
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		vis[x]=0;
		cnt[x]++;
		for(int i=0;i<(int)a[x].size();i++)
		{
			int y=a[x][i];
			if(dis[y]<dis[x]+b[x][i])
			{
				dis[y]=dis[x]+b[x][i];
				if(vis[y]==0)
				{
					vis[y]=1;
					q.push(y);
					if(cnt[y]==n)
					{
						return 0;
					}
				}
			}
		}
	}
	return 1;
}
int main()
{
	w=read();
	while(w--)
	{
		n=read(),m=read();
		for(int i=1;i<=m;i++)
		{
			int s=read(),t=read(),v=read();
			a[s-1].push_back(t);
			b[s-1].push_back(-v);
			a[t].push_back(s-1);
			b[t].push_back(v);
		}
		fill(vis,vis+n+1,0);
		fill(cnt,cnt+n+1,0);
		int flag=0;
		for(int i=0;i<=n;i++)
		{
			if(cnt[i]==0)
			{
				if(!spfa(i))
				{
					flag=1;
					break;
				}
			}
		}
		if(flag==0)
		{
			cout<<"true"<<endl;
		}
		else cout<<"false"<<endl;
	}
	return 0;
}
2022/10/15 23:16
加载中...