90pts 求调,WAon#7
查看原帖
90pts 求调,WAon#7
669924
guozhetao楼主2024/7/24 18:50

记录

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s;
int head[400005],nex[800005],cnt = 0; 
double a[400005];
bool vis[400005];
struct edge{
	int to;
	double w;
}node[800005];
void add(int x,int y,double z) {
	nex[++cnt] = head[x];
	head[x] = cnt;
	node[cnt].to = y;
	node[cnt].w = z;
} 
struct point{
	int id;
	double w;
	friend bool operator <(point x,point y) {
		return x.w > y.w;
	}
};
priority_queue<point>p; 
int A,B;
signed main() {
	scanf("%lld %lld",&n,&m);
	for(int i = 1;i <= n;i++) a[i] = 200000000.0;
	for(int i = 1;i <= m;i++) {
		int x,y;
		double z;
		scanf("%lld %lld %lf",&x,&y,&z);
		z /= 100;
		add(x,y,z),add(y,x,z);
	}
	scanf("%lld %lld",&A,&B);
	a[A] = 100;
	point b;
	b.id = A,b.w = 100;
	p.push(b);
	while(!p.empty()) {
		point now = p.top();
		p.pop();
		if(vis[now.id]) continue;
		vis[now.id] = 1;
		for(int i = head[now.id];i;i = nex[i]) {
			if(a[node[i].to] > a[now.id] / (1.0 - node[i].w)) {
				a[node[i].to] = a[now.id] / (1.0 - node[i].w);
				point c;
				c.id = node[i].to;
				c.w = a[now.id] + node[i].w;
				p.push(c);
			}
		}
	}
	printf("%.8lf",a[B]);
    return 0;
}
2024/7/24 18:50
加载中...