18分,求调
查看原帖
18分,求调
739840
zhiduanqinchang楼主2023/8/10 15:21
#include<bits/stdc++.h>
#define Maxn 10000000
using namespace std;
priority_queue< pair<int,int> > q;
int head[Maxn],ver[Maxn],edge[Maxn],Next[Maxn],x,s,i,y,z,D,P,C,F,S,l;
int tot,n,m,d[Maxn];
bool v[Maxn];
void add(int x,int y,int z){
ver[++tot]=y,edge[tot]=z;
Next[tot]=head[x],head[x]=tot;
}
void asd(int s){
	for(int w=1;w<=C;w++){
		d[w]=-1;
	}
	d[s]=D;
	q.push(make_pair(0,s));
	while(!q.empty()){
	x=q.top().second;
	q.pop();
	if(v[x]) continue;
	v[x]=1;
	for(int i=head[x];i;i=Next[i]){
	int y=ver[i],z=edge[i];
	if(d[y]<d[x]+z){
	d[y]=d[x]+z;
	q.push(make_pair(d[y],y));
					}
				}
			}
	}
int main(){
	cin>>D>>P>>C>>F>>S;
	for(i=1;i<=P;i++){
		cin>>x>>y;
		add(x,y,D);
	}
	for(i=1;i<=F;i++){
		cin>>x>>y>>z;
		add(x,y,D-z);
	}
	asd(S);
	for(i=1;i<=C;i++)
	l=max(l,d[i]);
	cout<<max(-1,l);
	return 0;
}

2023/8/10 15:21
加载中...