90求助
查看原帖
90求助
917301
xwx123456楼主2025/2/8 14:27
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e2+5,M=1e3+5;
int d,p,c,f,s;
int cnt,head[N],ans;
int dis[N],cnt1[N];
bool flag[N];
queue<int> q;
struct Edge {
	int next,to,w;
} edge[M];
inline void add(int u,int v,int d) {
	edge[++cnt].to=v;
	edge[cnt].next=head[u];
	edge[cnt].w=d;
	head[u]=cnt;
}
void spfa(){
	memset(dis,0xcf,sizeof(dis));
	dis[s]=d,q.push(s);
	while(!q.empty()){
		int u=q.front();
		q.pop();
		flag[u]=0;
		for(int i=head[u];i;i=edge[i].next){
			int v=edge[i].to,ww=edge[i].w;
			if(dis[v]<dis[u]+ww){
				dis[v]=dis[u]+ww;
                if(!flag[v]){
                	if(++cnt1[v]>=c){
                		f=1;
                		return;
					}
                	flag[v]=1;
                	q.push(v);
				}
			}
		}
	}
}
signed main(){
	cin>>d>>p>>c>>f>>s;
	for(int i=1;i<=p;i++){
		int x,y;
		cin>>x>>y;
		add(x,y,d);
	}
	for(int i=1;i<=f;i++){
		int x,y,w;
		cin>>x>>y>>w;
		add(x,y,d-w);
	}
	spfa();
	if(f==1){
		cout<<-1;
		return 0;
	}
	for(int i=1;i<=c;i++)
		ans=max(ans,dis[i]);
	cout<<ans;
    return 0;
}
2025/2/8 14:27
加载中...