社区讨论

85pts求助

P1993小 K 的农场参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m3tpth3y
此快照首次捕获于
2024/11/23 13:14
去年
此快照最后确认于
2025/11/04 14:07
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
queue<long long> q;
long long s,m,n,vis[100005],cnt[100005],t;
vector<long long> w[100005],e[100005]; 
long long dis[100005];
void spfa(){
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dis[0]=0;
	vis[0]=1;
	cnt[0]=0;
	q.push(0);
	while(!q.empty()){
		long long x=q.front();
		q.pop(),vis[x]=0;
		for(long long i=0;i<e[x].size();i++){
			long long v=e[x][i];
			if(dis[v]>dis[x]+w[x][i]){
				dis[v]=dis[x]+w[x][i];
				cnt[v]=cnt[v]+1;
				if(cnt[v]>=n+1){
					cout<<"No";
					return ;
				}
				if(!vis[v]){
					q.push(v);
					vis[v]=1;
				}
			}
		}
		
	}
	cout<<"Yes";
	return ;
}

int main(){
	scanf("%lld%lld",&n,&m);
	for(long long i=1;i<=m;i++){
		long long x,y,z,t;
		scanf("%lld%lld%lld",&t,&x,&y);
		if(t==1){
			scanf("%d",&z);
			e[y].push_back(x);
			w[y].push_back(-z); 
		}
		if(t==2){
			scanf("%lld",&z);
			e[x].push_back(y);
			w[x].push_back(z); 
		}else{
			e[y].push_back(x);
			w[y].push_back(0); 
			e[x].push_back(y);
			w[x].push_back(0); 
		}
	}
	for(long long i=1;i<=n;i++) e[0].push_back(i),w[0].push_back(0);
	spfa();
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...