记录编号 221870 评测结果 AAAAAAAAAA
题目名称 最小花费 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 0.151 s
提交时间 2016-01-26 12:15:01 内存使用 3.39 MiB
显示代码纯文本
#include<cstdio>
#include<queue>
using namespace std;
const int maxn = 2005,maxm = 200050;
struct edge{
	int next,to;
	double w;
}lst[maxm];
int len = 1,n,m;
int first[maxn];
void insert(int v1,int v2,int cost){
	lst[len].to = v2;
	lst[len].w  = (100-cost)/100.0;
	lst[len].next = first[v1];
	first[v1] = len++;
}
double dis[maxn];
bool vis[maxn];
struct node{
	int to;
	double w;
	bool operator < (const node & a)const{
		return w<a.w;
	}
	node(int _to,double _w){
		to = _to;w = _w;
	}
}; 
void dij(int s){
	priority_queue<node> q;
	q.push(node(s,1.0));
	while(!q.empty()){
		while(!q.empty()&&vis[q.top().to])q.pop();
		if(q.empty())break;
		int j = q.top().to;
		dis[j] = q.top().w;
		vis[j] = true;
		q.pop();
		for(int pt = first[j];pt;pt = lst[pt].next){
			if(!vis[lst[pt].to])q.push(node(lst[pt].to,dis[j]*lst[pt].w));
		}
	}
}
int main(){
	freopen("moneyb.in","r",stdin);
	freopen("moneyb.out","w",stdout);
	scanf("%d %d",&n,&m);
	int a,b,c;
	for(int i = 0;i<m;++i){
		scanf("%d %d %d",&a,&b,&c);
		insert(a,b,c);
		insert(b,a,c);
	}
	scanf("%d %d",&a,&b);
	dij(a);
	printf("%.8lf\n",100/dis[b]);
	fclose(stdin);fclose(stdout);
	return 0;
}