为什么6,8两个点会wa啊
查看原帖
为什么6,8两个点会wa啊
178865
小林伊吕波楼主2021/2/4 21:17

求助在座各位大佬 (:

#include<bits/stdc++.h>
using namespace std;
int dis[10005],q[40005],first[10005];
int t,m,n,w,tot,rdcs[10005];
bool ex[10005];
struct node{
	int next,to,v;
}e[20005];
void inser(int x,int y,int z)
{
	tot++;
	e[tot].next=first[x];
	first[x]=tot;
	e[tot].to=y;
	e[tot].v=z;
}
bool spfa(int i)
{
	dis[i]=0;
	q[1]=i;
	ex[i]=true;
	rdcs[i]++;
	int head=0,tail=1;
	while(head<tail)
	{
		head++;
		int x=q[head];
		ex[x]=false;
		for(int u=first[x];u;u=e[u].next)
		{
			int to=e[u].to;
			if(dis[to]>dis[x]+e[u].v)
			{
				dis[to]=dis[x]+e[u].v;
				if(!ex[to])
				{
					ex[to]=true;
					q[++tail]=to;
					rdcs[to]++;
					if(rdcs[to]>n) return true;
				}
			}
		}
	}
	return false;
}
int main()
{
	int x,y,z;
	scanf("%d",&t);
	while(t--)
	{
		tot=0;
		memset(e,0,sizeof(e));
		memset(first,0,sizeof(first));
memset(rdcs,0,sizeof(rdcs));
		memset(ex,false,sizeof(ex));
		memset(dis,127,sizeof(dis));
		memset(q,0,sizeof(q));
		scanf("%d%d%d",&n,&m,&w);
		for(int i=1;i<=m;i++)
		{
		scanf("%d%d%d",&x,&y,&z);
		inser(x,y,z);
		inser(y,x,z);
	}
	for(int i=1;i<=w;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		inser(x,y,-z); 
	}
	int f=0;
	for(int i=1;i<=n;i++)
	{
		if(spfa(i)) f=1;
	}
	if(f==1) cout<<"YES"<<endl;
	else
	cout<<"NO"<<endl;
	}
	return 0;
}
2021/2/4 21:17
加载中...