社区讨论
样例未过求调
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 条回复,欢迎继续交流。
正在加载回复...