Dijkstra30分求调!!!
查看原帖
Dijkstra30分求调!!!
712994
ggcggc楼主2023/8/6 19:48
#include<iostream>
#include<string>
#include<string.h>
#define ri register int
using namespace std;
const int N=4e5;
const int MAX=0x3f3f3f3f;
struct wyx{
	int to,next,w;
}edges[N];
int tot,n,m,s,t,sum;
int head[N],d[N],dp[N];
bool ok[N];
void add(ri u,ri v,ri len){
	edges[tot].to=v,edges[tot].next=head[u],edges[tot].w=len;
	head[u]=tot++;
	return;
}
void dijkstra(){
	ri mi,to,v,w;
	for(ri i=1;i<=n;i++){
		mi=-1;
		for(ri j=1;j<=n;j++){
			if(ok[j]==false&&(mi==-1||d[mi]>d[j])){
				mi=j;
			}
		}
		ok[mi]=true;
		for(ri j=head[mi];j!=-1;j=edges[j].next){
			to=edges[j].to,w=edges[j].w;
			sum=dp[to]=dp[mi]+1;
			if(ok[to]==false&&d[to]>d[mi]+w/sum){
				d[to]=d[mi]+w/sum;
			}
		}
	}	
}
int main(){
	std::ios::sync_with_stdio(false);
	std::cin.tie(NULL);
	cin>>n>>m>>s>>t;
	for(ri i=1;i<=n;i++){
		d[i]=MAX,head[i]=-1;
	}
	ri u,v,len;
	for(ri i=1;i<=m;i++){
		cin>>u>>v>>len;
		add(u,v,len);
		add(v,u,len);
	}
	d[t]=0;
	dp[t]=0;
	dijkstra();
	cout<<d[s]<<endl;
	return 0;
}
2023/8/6 19:48
加载中...