没开O2全对开了全错是为啥
查看原帖
没开O2全对开了全错是为啥
856309
oiyang楼主2023/5/16 15:00

没开O2全对开了全错是为啥

#include <bits/stdc++.h>
using namespace std;
int t;
const int maxnode=505;
const int maxline=3000;
int head[maxnode],k;
struct edge{
	int to,pre,w;
}line[maxline*3];
void addline(int u,int v,int value)
{
	k++;
	line[k].to=v;
	line[k].pre=head[u];
	line[k].w=value;
	head[u]=k;
}
int dis[maxnode*2];
bool vis[maxnode*2];
int cnt[maxnode*2];
int n,m;
queue <int>q;
bool dfs()
{
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	memset(cnt,0,sizeof(cnt));
	dis[1]=0;
	vis[1]=1;
	q.push(1);
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		vis[x]=0;
		for(int i=head[x];i;i=line[i].pre)
		{
			int v=line[i].to;
			if(dis[v]>dis[x]+line[i].w)
			{
				dis[v]=dis[x]+line[i].w,cnt[v]=cnt[x]+1;
				if(cnt[v]>=n)
					return 1;
				if(!vis[v])
					q.push(v),vis[v]=1;
			}
			
		}
	}
	return 0;
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>t;
	while(t--)
	{
		int w;
		cin>>n>>m>>w;
		for(int i=0;i<=maxnode;i++)
			head[i]=0;
		for(int i=0;i<=maxline;i++)
			line[i].pre=0;
		for(int i=1;i<=m;i++)
		{
			int u,v,value;
			cin>>u>>v>>value;
			addline(u,v,value);
			addline(v,u,value);
		}
		for(int i=1;i<=w;i++)
		{
			int u,v,p;
			cin>>u>>v>>p;
			addline(u,v,-p);
		}
		if(dfs())
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	return 0;
}
2023/5/16 15:00
加载中...