社区讨论

样例未过求调

P1576最小花费参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mlir4x4l
此快照首次捕获于
2026/02/12 09:00
上周
此快照最后确认于
2026/02/12 10:25
上周
查看原帖
CPP
/*

time : 2026-02-09 14:36:28

contest :

Problem : 

Solotion :

Code by 720872

*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<climits>
#include<bitset>
#define ll long long
#define ull unsigned long long
#define il inline
#define endl '\n'
#define y1 Y1
#define pii pair<int,int>
#define pli pair<ll, int>
#define pll pair<ll, ll>
#define _1 first
#define _2 second
#define mkp make_pair
#define pb push_back
#define debug(x, y) cout << x << " " << y << endl
using namespace std;

inline ll read(){
	ll t = 0, flag = 1;
	char a = getchar();
	while(!isdigit(a)){
		if(a == '-')
			flag = -1;
		a = getchar();
	}
	while(isdigit(a))
		t = t * 10 + a - '0', a = getchar();
	return t * flag;
}
//inline void put(ll x){
//	if(x < 0) putchar('-'), x = -x;
//	if(x < 10) putchar(x + '0');
//	else put(x / 10), putchar(x % 10 + '0');
//}

const int N = 1e4 + 5, M = 20 * N, inf = 0x3f3f3f3f;
int head[N], n, m, tot;
bool vis[N];
double dist[N];

struct E{
	int ver, edge, nxt;
}e[M];

void add(int u, int v, int w){
	e[++tot] = {v, (1.0 - 0.01 * w), head[u]};
	head[u] = tot;
}

priority_queue<pair<double, int> > q;

void dijkstra(int root){
	for(int i = 0; i <= n; i++)
		dist[i] = inf;
	memset(vis, 0, sizeof vis);
	dist[root] = 100;
	q.push(mkp(100, root));
	while(!q.empty()){
		int u = q.top()._2;
		q.pop();
		if(vis[u]) continue;
		vis[u] = 1;
		for(int i = head[u]; i; i = e[i].nxt){
			int v = e[i].ver;
			double w = e[i].edge;
			if(dist[v] > dist[u] / w){
				dist[v] = dist[u] / w;
				q.push(mkp(-dist[v], v));
			}
		}
	}
}

signed main(){
//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);
//	ios::sync_with_stdio(false);
//	cin.tie(0); cout.tie(0);
	int u, v, w, s, t;
	memset(head, -1, sizeof head);
	tot = -1, n = read(), m = read();
	for(int i = 1; i <= m; i++){
		u = read(), v = read(), w = read();
		add(u, v, w), add(v, u, w);
	}
	s = read(), t = read();
	dijkstra(t);
	printf("%.8lf\n", dist[s]);
	return 0;
}
/*
*/

回复

4 条回复,欢迎继续交流。

正在加载回复...