P2850,最后一个点被hack掉了,求大佬指点
  • 板块学术版
  • 楼主Lycdeer
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/21 23:41
  • 上次更新2024/8/22 10:34:25
查看原帖
P2850,最后一个点被hack掉了,求大佬指点
1088782
Lycdeer楼主2024/8/21 23:41
#include<bits/stdc++.h>
using namespace std;
const int N=10005;
const int INF=2147483647;
int h[N],nxt[N],to[N],val[N],cnt;
int dis[N],tmp[N];
bool vis[N],ans[N];
void init(){
	for(int i=1;i<=N;i++) h[i]=0,vis[i]=0,tmp[i]=0;
	cnt=0;
	memset(dis,0x3f,sizeof(dis));
	for(int i=1;i<=N;i++) to[i]=0,val[i]=0,nxt[i]=0;
}
void add(int a,int b,int c){
	to[++cnt]=b;
	val[cnt]=c;
	nxt[cnt]=h[a];
	h[a]=cnt;
}
void SPFA(int l,int n,int m){
	queue<int> q;
	q.push(1);
	dis[1]=0;
	vis[1]=true;
	while(q.size()){
		int u=q.front(); q.pop();
		vis[u]=false;
		for(int j=h[u];j;j=nxt[j]){
			int v=to[j],w=val[j];
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				if(vis[v]) continue;
				vis[v]=true;
				tmp[v]++;
				if(tmp[v]>n){
					ans[l]=true;
					return;
				}
				q.push(v);
			}
		}
	}
}
int main(){
	int T; cin>>T;
	for(int l=1;l<=T;l++){
		init();
		int n,m,w; cin>>n>>m>>w;
		for(int i=1;i<=m;i++){
			int u,v,p; cin>>u>>v>>p;
			add(u,v,p); add(v,u,p);
		}
		for(int i=1;i<=w;i++){
			int u,v,p; cin>>u>>v>>p;
			add(u,v,-p);
		}
		SPFA(l,n,m);
	}
	for(int i=1;i<=T;i++)
		if(ans[i]) cout<<"YES"<<'\n';
		else cout<<"NO"<<'\n';
	return 0;
}
2024/8/21 23:41
加载中...