P1576 最小花费

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2010,M=200010;
int n,m;

typedef pair<double,int> PDI; 
int h[N],ne[M],e[M],idx;
double w[M];
double dist[N]; 
bool st[N];

void add(int x,int y,int z)
{
    e[idx]=y,ne[idx]=h[x],w[idx]=(1-z/100.0),h[x]=idx++;
}

void dijkstra(int A)
{
	memset(dist,0,sizeof dist);
	dist[A]=1;
	priority_queue<PDI> heap;
	heap.push({dist[A],A});
	
	while(!heap.empty()){
		auto t=heap.top();
		heap.pop();
		
		int ver=t.second;
		if(st[ver]) continue;
		st[ver]=true;
		
		for(int i=h[ver];i!=-1;i=ne[i]){
			int j=e[i];
			if(dist[j]<dist[ver]*w[i]){
				dist[j]=dist[ver]*w[i];
				heap.push({dist[j],j});
			}
		}
		
	}
}

int main()
{
    
    cin>>n>>m;

    memset(h,-1,sizeof h);

    for(int i=0;i<m;i++){
        int x,y,z;
        cin>>x>>y>>z;
        add(x,y,z);
        add(y,x,z);
    }

    int A,B;
    cin>>A>>B;

    dijkstra(A);

	printf("%.8lf\n",100/dist[B]);
	
	return 0;
                   
}
posted @ 2026-01-22 21:55  AnoSky  阅读(4)  评论(0)    收藏  举报