求助!Bellman-Ford
查看原帖
求助!Bellman-Ford
444236
Lesiris楼主2023/9/23 16:18

想问一下怎么判断从哪个顶点出发呢?

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N=10010;
LL t,n,m,w[N],flag,dis[N],v[N],u[N],mm;
inline LL read()
{
    LL x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
	{
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
	{
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}
int main()
{
	t=read();
	while(t--)
	{
		mm=0;
		memset(w,0,sizeof w);
		memset(u,0,sizeof u);
		memset(v,0,sizeof v);
		memset(dis,0,sizeof dis);
		n=read(),m=read();
		for(int i=1;i<=m;i++)
		{
			u[i]=read(),v[i]=read(),w[i]=read();
			if(w[i]>=0)
			{
				mm++;
				u[m+mm]=v[i],v[m+mm]=u[i],w[m+mm]=w[i];
			}
		}
		
		for(int k=1;k<=n-1;k++)
			for(int i=1;i<=m+mm;i++)
				if(dis[v[i]]>dis[u[i]]+w[i])
					dis[v[i]] = dis[u[i]] + w[i];

		flag = 0;
		for(int i = 1;i <= m+mm;i++)
			if(dis[v[i]] > dis[u[i]] + w[i])
				flag = 1;
		if(flag==1) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

2023/9/23 16:18
加载中...