求条
查看原帖
求条
774441
sheryangTLE楼主2025/1/14 15:36

40pts,剩下的全T

#include<bits/stdc++.h>
using namespace std;
const int M=3e3+10,N=2e3+10;
struct edge{
	int v,w;
};
vector<edge> e[M];
int t,n,m,dis[N],vis[N],cnt[N],ans;
void spfa(){
	dis[1]=0;
	queue<int> q;
	while(!q.empty()) q.pop();
	q.push(1);
	vis[1]=1;
	cnt[1]=1;
	while(!q.empty()){
		int u=q.front();q.pop();
		vis[u]=0;
		for(int i=0;i<e[u].size();i++){
			int v=e[u][i].v,w=e[u][i].w;
			if(dis[u]+w<dis[v]){
				dis[v]=dis[u]+w;
				if(!vis[v]){
					vis[v]=1;
					cnt[v]++;
					q.push(v);
					if(cnt[v]>n){
						ans=1;
						break;
					}
				}
			}
		}
	}
}
int main(){
	cin>>t;
	while(t--){
		memset(dis,0x3f,sizeof(dis));
		memset(vis,0,sizeof vis);
		memset(cnt,0,sizeof cnt);
		ans=0;
		for(int i=0;i<m;i++){
			e[i].clear();
		}
		cin>>n>>m;
		for(int i=1,x,y,z;i<=m;i++){
			cin>>x>>y>>z;
			if(z>=0){
				e[x].push_back({y,z});
				e[y].push_back({x,z});
			}
			else e[x].push_back({y,z});
		}
		spfa();
		if(ans) cout<<"YES";
		else cout<<"NO";
		puts("");
	}
	return 0;
}
2025/1/14 15:36
加载中...