警示后人
查看原帖
警示后人
777849
guoziyang21楼主2024/1/25 18:35

多测不清空,爆零两行泪……

20pts代码:

# include<iostream>
# include<vector>
# include<queue>
# include<map>
using namespace std;
# define ll long long
# define p pair<ll,int>
# define m(a,b) make_pair(a,b)

const int N=2e3+5;
const ll inf=0x7fffffff;
int t,n,m,u,v,cnt[N];
vector<p> e[N];
ll w,dis[N];
bool vis[N];
queue<int> q;

void add(int u,int v,ll w){
	e[u].push_back(m(w,v));
}

bool spfa(){
	q.push(1);
	dis[1]=0;
	vis[1]=1;
	while(!q.empty()){
		u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=0,l=e[u].size();i<l;++i){
			v=e[u][i].second;
			w=e[u][i].first;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				cnt[v]=cnt[u]+1;
				if(cnt[v]>=n) return 0;
				if(!vis[v]){
					q.push(v);
					vis[v]=1;
				} 
			}
		}
	}
	return 1;
}

void solve(){
	cin>>n>>m;
	for(int i=1;i<=n;++i) dis[i]=inf;
	for(int i=1;i<=m;++i){
		cin>>u>>v>>w;
		add(u,v,w);
		if(w>=0) add(v,u,w);
	}
	if(spfa()) cout<<"NO\n";
	else cout<<"YES\n";
}

int main(){
	cin>>t;
	while(t--) solve();
	return 0;
}
2024/1/25 18:35
加载中...