求助,样例都过不了
查看原帖
求助,样例都过不了
241894
范·达克霍姆楼主2021/7/6 16:45
#include<bits/stdc++.h>
using namespace std;
#define INF 2147483648 
int t;
int n,m;
int e,v,w;
int g[2010][2010];
int pre[2010],dis[2010],u[2010];
bool vis[2010];
bool SPFA(int sour)  // sour 源点 
{
    queue<int> q; 
    memset(vis,0,sizeof(vis));
    memset(pre,-1,sizeof(pre));
    memset(u,0,sizeof(u));
    for(int i = 1; i <= n; i++)
    {
    	dis[i] = INF;
	} 
    q.push(sour);
    u[sour]++;
    vis[sour] = true;
    dis[sour] = 0;
    while(!q.empty())
    {
        int v1;
        v1 = q.front();
        q.pop();
        vis[v1] = false;
        for(int i = 0; i < n; i++)
        {
            if(dis[i] > dis[v1] + g[v1][i])
            {
                dis[i] = dis[v1] + g[v1][i];
                if(!vis[i])
                {
                    q.push(i);
                    u[i]++;
                    if(u[i] > n)
                    {
                    	while(!q.empty())
                    	{
                    		q.pop();
						}
                    	return true;
					}
                    vis[i] = true;
                    pre[i] = v1;
                }
            }
        }
    }
    return false;
}
int main()
{
	cin>>t;
	while(t--)
	{
		memset(g,INF,sizeof(g));
		cin>>n>>m;
		for(int i=1;i<=m;i++)
		{
			cin>>e>>v>>w;
			if(w>=0)
			{
				g[e][v]=w;
				g[v][e]=w;
			}
			else
			{
				g[e][v]=w;
			}
		}
		if(SPFA(1))
		{
			cout<<"YES"; 
		}
		else if(!SPFA(1))
		{
//			for(int i=1;i<=n;i++) 
//			{
//				cout<<u[i]<<" ";
//			}
			cout<<"NO";
		}
	}
	return 0;
}
2021/7/6 16:45
加载中...