我也不知道为什么,写的SPFA都能A
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
#include <iomanip>
using namespace std;
typedef pair<int, double> PII;
const int N = 3e5 + 10;
int a, b, idx, n, m, e[N], ne[N], h[N];
double dist[N], w[N];
bool st[N];
void add(int a, int b, double c)
{
e[idx] = b;
w[idx] = c;
ne[idx] = h[a];
h[a] = idx++;
}
void dijkstra()
{
memset(dist, -0x3f, sizeof dist);
dist[a] = 1.0;
priority_queue<PII, vector<PII>, less<PII>> heap;
heap.push({a, dist[a]});
while(!heap.empty())
{
auto t = heap.top();
heap.pop();
int ver = t.first;
double dis = 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] < dis * w[i])
{
dist[j] = dis * w[i];
heap.push({j, dist[j]});
}
}
}
}
int main()
{
memset(h, -1, sizeof h);
cin >> n >> m;
for (int i = 1, a, b; i <= m; i++)
{
double c;
cin >> a >> b >> c;
c = (100 - c) / 100;
add(a, b, c);
add(b, a, c);
}
cin >> a >> b;
dijkstra();
cout << fixed << setprecision(8) << 100 / dist[b];
}