P3385 20pts 求调
查看原帖
P3385 20pts 求调
877908
liukezhang楼主2023/12/17 17:00

找不出问题啊

TLE

#include<bits/stdc++.h>
using namespace std;
struct edge
{
	int dis,nxt,to;
};
std::queue<int> q;
const int N=1e5+7;
int n,m,s[N],d[N],cnt,head[N];
bool book[N];
edge e[N];
inline void add(int u,int v,int w)
{
	e[++cnt].dis=w;
	e[cnt].to=v;
	e[cnt].nxt=head[u];
	head[u]=cnt;
	return;
}
inline void spfa()
{
	memset(book,false,sizeof(book));
	memset(s,0,sizeof(s));
	memset(d,0x3f,sizeof(d));
	book[1]=true;
	d[1]=0;
	q.push(1);
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		book[u]=false;
		for(int i=head[u];i;i=e[i].nxt)
		{
			int v=e[i].to,w=e[i].dis;
			if (d[v]>d[u]+w)
			{
				d[v]=d[u]+w;
				s[v]=s[u]+1;
				if (s[v]<=n)
				{
					std::cout<<"YES"<<endl;
					return;
				}
				if (!book[v])
				{
					book[v]=true;
					q.push(v);
				}
			}
		}
	}
	std::cout<<"NO"<<endl;
	return;
}
int main(void)
{
	int t;
	std::cin>>t;
	for(int i=1;i<=t;i++)
	{
		int n,m;
		std::cin>>n>>m;
		cnt=0;
		memset(head,0,sizeof(head));
		for(int j=1;j<=m;j++)
		{
			int u,v,w;
			std::cin>>u>>v>>w;
			add(u,v,w);
			if (w>=0)
			{
				add(v,u,w);
			}
		}
		spfa();
	}
 	return 0;
}

2023/12/17 17:00
加载中...