一样的代码,为什么一直RE不同的数据
查看原帖
一样的代码,为什么一直RE不同的数据
181870
炳源楼主2020/11/7 09:56

rt

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue> 
using namespace std;
const int maxsize = 210000;
int head[maxsize];
struct Edge
{
	int next;
	int to;
	int val;
}edge[maxsize * 2];
int c_edge;
void AddEdge(int u,int v,int val)
{
	edge[++c_edge].next = head[u];
	edge[c_edge].to = v;
	edge[c_edge].val = val;
	head[u] = c_edge;
}
int n,m;
queue<int> q,CLS;
bool in[maxsize];
int dist[maxsize];
int cnt[maxsize];
bool SPFA()
{
	memset(dist,0x3f,sizeof(dist));
	memset(in,0,sizeof(in));
	memset(cnt,0,sizeof(cnt));
	q = CLS;
	q.push(1);
	dist[1] = 0;
	in[1] = 1;
	cnt[1]++;
	while(!q.empty())
	{
		int pos = q.front();
		q.pop();
		in[pos] = 0;
		for(int i = head[pos];i;i = edge[i].next)
		{
			int to = edge[i].to;
			if(dist[to] > dist[pos] + edge[i].val)
			{
				dist[to] = dist[pos] + edge[i].val;
				if(++cnt[to] > n)
					return 1; 
				if(!in[to])
				{
					in[to] = 1;
					q.push(to);
				}
			}
		}
	}
	return 0;
}
int main()
{
	int t = 0;
	scanf("%d",&t);
	while(t--)
	{
		memset(head,0,sizeof(head));
		memset(edge,0,sizeof(edge));
		c_edge = 0;
		scanf("%d%d",&n,&m);
		for(int i = 1;i <= m;i++)
		{
			int u = 0,v = 0,val = 0;
			scanf("%d%d%d",&u,&v,&val);
			AddEdge(u,v,val);
			if(val >= 0)
				AddEdge(v,u,val);
		}
		if(SPFA())
			puts("YES");
		else
			puts("NO");
	}
}
2020/11/7 09:56
加载中...