死活过不了,WA#9
查看原帖
死活过不了,WA#9
800543
NirvanaCeleste楼主2024/6/22 19:17
#include <bits/stdc++.h>
using namespace std;
const int inf = 100001,M = 3030 * 2 * 2020,N = 2020;
inline void read(int& qwq){
	int awa = 0,w = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9'){
		if(ch == '-') w = -1;
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9'){
		awa = awa * 10 + ch - '0';
		ch = getchar();
	}
	qwq = awa * w;
}
int n,m,tot,T;
struct node{
	int to,vlu,nxt;
}G[M];
int hed[N],dis[N],cnt[N];
bool pd;
bool vis[N];
void insert_edge(int u,int v,int w){
	G[tot].vlu = w;
	G[tot].to = v;
	G[tot].nxt = hed[u];
	hed[u] = tot++;
}
void pre(){
	memset(vis,0,sizeof(vis));
	memset(cnt,0,sizeof(cnt));
//	memset(dis,0x3f,sizeof(dis));
	fill(dis,dis+N,inf);
	memset(hed,-1,sizeof(hed));
	tot = 0;
	pd = 0;
}
void scan(){
	read(n),read(m);
	int u,v,w;
	for(int i=1;i<=m;i++){
		read(u),read(v),read(w);
		insert_edge(u,v,w);
		if(w >= 0) insert_edge(v,u,w);
	}
}
void spfa(int s){
	queue<int> sp;
	dis[1] = 0;
	vis[1] = 1;
	sp.push(1);
	while(!sp.empty()){
		if(pd) break;
		int u = sp.front();
		sp.pop();
		vis[u] = 0;
		for(int i = hed[u];i != -1;i = G[i].nxt){
			int v = G[i].to,w = G[i].vlu;
			if(dis[v] > dis[u] + w){
				dis[v] = dis[u] + w;
				if(!vis[v]){
					sp.push(v);
					vis[v] = 1;
					if(++cnt[v] > n){
						pd = 1;
						break;
					}
				}
			}
		}
	}
}
int main(){
//	freopen("P3385_9.in","r",stdin);
	cin>>T;
	for(int i=1;i<=T;i++){
		pre();
		scan();
		spfa(1);
		if(pd) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
}
2024/6/22 19:17
加载中...