求助
  • 板块灌水区
  • 楼主Reply_
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/11/27 15:46
  • 上次更新2023/10/27 01:12:43
查看原帖
求助
373530
Reply_楼主2022/11/27 15:46

啊啊啊学术区没人看

给Case张可能有重边有自环的带权有向图判断他们有没有负环 有输出YES 没有输出NO

输入格式:
一个数Case表示图的张数
以后每张图两个n,m表示 这张图的点数和边数
接下来m行 每行三个数 xi,yi,zi 表示一条xiyi 权值为z的边
输出格式:
Case行 第i行表示第i张图有没有负环
有输出YES 没有输出NO
#include<bits/stdc++.h>
#define F(i,a,b) for(register int i = (a);i<=(b);i++)
#define ll long long
using namespace std;
inline int read(){register int x=0,f=1;register char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
int main()
{
	int T;
	cin >> T;
	F(ttt,1,T)
	{
		vector<int>g[150],w[150];
		int n=read(),m=read();
		F(i,1,n)
		{
			int u,v,W;
			cin >> u >> v >> W;
			g[u].push_back(v);
			w[u].push_back(W);
		}
		bool flag=0;
		F(i,1,n)
		{
			int dis[150],sum[150];
			memset(dis,0,sizeof(dis));
			memset(sum,0,sizeof(sum));
			queue<int>q;
			q.push(i);
			while(!q.empty())
			{
				int u=q.front();
				q.pop();
				sum[u]++;
				if(sum[u]==n)
				{
					puts("YES");
					flag=1;
					break;
				}
				F(j,0,g[u].size()-1)
				{
					int v=g[u][j];
					if(dis[u]+w[u][j]<=dis[v])
					{
						dis[v]=dis[u]+w[u][j];
						q.push(v);
					}
				}
			}
			if(flag==1) break;
		}
		if(!flag) puts("NO");
	}
	return 0;
}


为什么会RE啊

2022/11/27 15:46
加载中...