81分求助!
查看原帖
81分求助!
320449
forest114514楼主2023/7/7 21:55
#include<bits/stdc++.h>
using namespace std;
const int N=505;
int d,p,c,f,s;
int idx=0,hd[N],re[N],ne[N],num[N],cnt[N]={0};
void _add(int u,int v,int w){
	re[++idx]=v;
	num[idx]=w;
	ne[idx]=hd[u];
	hd[u]=idx;
}
int que[1005],head=1,tail=1;
long long dis[N];
bool book[N];
bool spfa(int st){
	memset(dis,0x3f,sizeof dis);
	memset(book,false,sizeof book);
	que[tail]=st;book[st]=1;
	dis[st]=-d;tail++;
	
	while(head<tail){
		int x=que[head];
		
		for(int i=hd[x];i;i=ne[i]){
			int y=re[i];
			
			if(dis[y]>dis[x]+num[i]){
				dis[y]=dis[x]+num[i];
				cnt[y]=cnt[x]+1;
				if(cnt[y]>=c) return false;//>=?>?
				if(book[y]==0){
					que[tail++]=y;
					book[y]=1;
				}
			}
		}
		book[x]=0;
		head++;
	}
	
	return true;
}
int main(){
	ios::sync_with_stdio(false);
	cin>>d>>p>>c>>f>>s;
	int a,b,w;
	for(int i=1;i<=p;i++){
		cin>>a>>b;
		_add(a,b,0-d);
	}
	for(int i=1;i<=f;i++){
		cin>>a>>b>>w;
		_add(a,b,w-d);
	}
	if(spfa(s)) {
		long long ans=0;
		for(int i=1;i<=c;i++) {
			ans=min(ans,dis[i]);
			//cout<<-dis[i]<<" ";
		}
		cout<<-ans<<endl;
	}
	else cout<<"-1"<<endl;
	return 0;
}

真不知道哪错了,各位大佬能帮忙看一下吗
2023/7/7 21:55
加载中...