dijkstra全WA了!!求找!!!orz
  • 板块P1576 最小花费
  • 楼主tbbbk
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/1/27 19:25
  • 上次更新2023/10/28 10:43:23
查看原帖
dijkstra全WA了!!求找!!!orz
582548
tbbbk楼主2022/1/27 19:25

我也不知道为什么,写的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];
}
2022/1/27 19:25
加载中...