20分,求调!!!!!!
查看原帖
20分,求调!!!!!!
1290720
a1127792088楼主2024/3/10 18:50
#include<bits/stdc++.h>
using namespace std;
/*最短路径dijst*/
const int maxN=1005,maxM=200010;
double dis[maxN],ans;
int head[maxN],cnt=1;
int n,m,x,y,a,b,z;
bool vis[maxN];
struct edge{
	int to;
	double val;
	int next;
}e[maxM];
struct node{
	int pos;
	double val;
	bool operator < (const node &x)const{
		return this->val < x.val;
	}
};

void add(int x, int y, int val){
	e[cnt].to=y;
	e[cnt].val=1.0-(double)val/100.0;
	e[cnt].next=head[x];
	head[x]=cnt++;
}

priority_queue<node> q;
void dijst(int a){
	q.push((node){a,1.0});
	while(!q.empty()){
		int x=q.top().pos;
		q.pop();
		if(vis[x])	continue;
		vis[x]=1;
		for(int i=head[x];i;i=e[i].next){
			double v=e[i].val;
			int t=e[i].to;
			if(dis[t]<dis[x]*v){
				dis[t]=dis[x]*v;
				if(!vis[t])	q.push((node){t,v});
			}
		}
	}
}


int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		dis[i]=0.0;
	}
	for(int i=0;i<m;i++){
		cin>>x>>y>>z;
		add(x,y,z);
		add(y,x,z);
	}
	cin>>a>>b;
	dis[a]=1.0;
	dijst(a);
	ans=100.0/dis[b];
//	cout<<fixed<<setprecision(8)<<ans<<endl; 
	printf("%.8f",ans);		
	return 0;
}



2024/3/10 18:50
加载中...