30pts求助
查看原帖
30pts求助
737575
liangjindong0504楼主2023/9/6 21:15

rt。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s,t,u,v,w,dp[20010];
struct node{
	int zhong,chang;
};
struct node2{
	int zhong,ceng;
};
vector<node>vec[20010]; 
void spfa(int x){
	queue<node2>q;
	q.push((node2){x,0LL});
	while(!q.empty()){
		int k=q.front().zhong;
		int ks=q.front().ceng;
		q.pop();
		for(int i=0LL;i<vec[k].size();i++){
			int y=vec[k][i].zhong;
			int c=vec[k][i].chang/(ks+1LL);
			if(dp[k]+c<dp[y]){
				dp[y]=dp[k]+c;
				q.push((node2){y,ks+1LL});
			}
		}
	}
}
signed main(){
	cin>>n>>m>>s>>t;
	for(int i=1;i<=n;i++){
		dp[i]=1e17;
	}
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		vec[u].push_back((node){v,w});
		vec[v].push_back((node){u,w});
	}
	dp[t]=0LL;
	spfa(t);
	cout<<dp[s];
	return 0;
}
2023/9/6 21:15
加载中...