代码求调教,悬棺
查看原帖
代码求调教,悬棺
651908
8NewOC楼主2023/7/18 10:45
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=10001;
int n,m,p,t=0,f=0;
int u,v,w;
int mp[N][N];
int mx=-1e15;
int vis[N],ind[N];
int cnt[N],dis[N];
vector<int>V[N];
void spfa(){
	t++;
	dis[1]=0;
	bool fl=0;
	queue<int>q;
	q.push(1);
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=0;i<V[u].size();i++){
			int v=V[u][i];
			if(cnt[v]==n) continue;
			if(dis[v]>dis[u]+mp[u][v]+p*t){
				dis[v]=dis[u]+mp[u][v]+p*t;
				if(!vis[v]){
					vis[v]=1;
					q.push(v);
					cnt[v]++;
				}
			}
		}
	}
	if(cnt[n]==n||(f==1&&dis<0)) cout<<"-1";
	else if(dis[n]>0) cout<<0;
    else cout<<-dis[n];
}
signed main(){
	cin>>n>>m>>p;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		mp[u][v]=-w;
      	if(u==v&&w>=p){
          	f=1;
        }
		V[u].push_back(v);
	}
	for(int i=1;i<=n;i++){
		dis[i]=1e15;
	}
	spfa();
}
2023/7/18 10:45
加载中...