70求调
查看原帖
70求调
793625
Pink_Cut_Tree楼主2023/10/10 19:09
#include<iostream>
#include<vector>
#include<queue>
#define int long long
using namespace std;
const int N=5005;
int n,r,u,v,w,k;
#define pii pair<int,int>
#define inf 2147483647
int dis[N],dis2[N];
struct Edge{
	int to,value;
};
vector<Edge>G[N];
priority_queue<pii,vector<pii>,greater<pii> >Q;
bool flag;
int num[N],cnt;
int pa[N];
signed main(){
	cin.tie(0)->sync_with_stdio(0);
	cin>>n>>r>>k;
	while(r--){
		cin>>u>>v>>w;
		G[u].push_back({v,w});
		G[v].push_back({u,w});
	}
	for(int i=2;i<=n;i++){
		dis[i]=dis2[i]=inf;
	}
	dis2[1]=inf;
	Q.push({dis[1],1});
	while(!Q.empty()){
		int u=Q.top().second;
		Q.pop();
		for(int i=0;i<G[u].size();i++){
			int son=G[u][i].to;
			if(pa[son]<k&&son!=n&&son!=1){
				continue;
			}
			int cost=G[u][i].value;
			flag=0;
			if(dis[son]>dis[u]+cost){
				dis2[son]=min(dis2[son],dis[son]);
				dis[son]=dis[u]+cost;
				flag=1;
			}
			else if(dis2[son]>dis[u]+cost&&dis[u]+cost!=dis[son]){
				dis2[son]=dis[u]+cost;
				flag=1;
			}
			else if(dis2[son]>dis2[u]+cost){
				dis2[son]=dis2[u]+cost;
				flag=1;
			}
			if(flag){
				Q.push({dis[son],son});
			}
		}
	} 
	if(dis2[n]==inf){
		cout<<"-1";
	}
	else{
		cout<<dis2[n];
	}
return 0;
}
2023/10/10 19:09
加载中...