蒟蒻刚学差分约束,WA on #18,95pts
查看原帖
蒟蒻刚学差分约束,WA on #18,95pts
1353330
K_J_M楼主2024/7/13 12:02
#include<bits/stdc++.h>
using namespace std;
const int N = 5e3+10;
int n,m,op,a,b,c;
struct node{
	int id,w;
};
vector<node>e[N];
int cnt[N],vis[N],dis[N];
int spfa(int s){
	queue<int>q;
	q.push(s);
	vis[s]=1;
	for(int i=1;i<=n;i++) dis[i]=0x3fffffff;
	dis[s]=0;
	while(!q.empty()) {
		int x=q.front();
		q.pop();
		vis[x]=0;
		for(int i=0;i<e[x].size();i++){
			if(dis[e[x][i].id]>dis[x]+e[x][i].w) {
				dis[e[x][i].id]=dis[x]+e[x][i].w;
				if(!vis[e[x][i].id]) {
					vis[e[x][i].id]=1;
					q.push(e[x][i].id);
					cnt[e[x][i].id]++;
					if(cnt[e[x][i].id]>=n) return false;; 
				}
			}
		}
	}
	return true;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>op;
		if(op==1){
			cin>>a>>b>>c;
			e[a].push_back({b,-c});
		}else{
			if(op==2){
				cin>>a>>b>>c;
				e[b].push_back({a,c});
			} else{
				e[a].push_back({b,-c});
				e[b].push_back({a,c});
			}
		}
	}
	for(int i=1;i<=n;i++) e[n+1].push_back({i,0});
	if(spfa(n+1)) {
		cout<<"Yes";
	}else{
		cout<<"No";
	}
	return 0;
}
2024/7/13 12:02
加载中...