求助 样例能过, 但是全部WA
查看原帖
求助 样例能过, 但是全部WA
468918
SailFlorve楼主2021/3/21 01:06

新手刚入门图论,模板是书上的QWQ

#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;

struct Node {
    int v;
    double dis;
    Node(int _v, double _dis) : v(_v), dis(_dis) {}
};

vector<Node> Adj[2010];

int n, num[2010];
bool inq[2010];

double d[2010];

bool SPFA(int s) {
    memset(inq, false, sizeof(inq));
    memset(num, 0, sizeof(num));
    fill(d, d + 2010, 0);

    queue<int> Q;
    Q.push(s);
    inq[s] = true;
    num[s]++;
    d[s] = 1;

    while (!Q.empty()) {
        int u = Q.front();
        Q.pop();
        inq[u] = false;
        for (int j = 0; j < Adj[u].size(); j++) {
            int v = Adj[u][j].v;
            double dis = Adj[u][j].dis;
            if (d[v] < d[u] * dis) {
                d[v] = d[u] *  dis;
                if (!inq[v]) {
                    Q.push(v);
                    inq[v] = true;
                    num[v]++;
                    if (num[v] >= n) return false;
                }
            }
        }
    }

    return true;
}

int main() {
    int m;
    scanf("%d %d", &n, &m);
    for (int i = 0; i < m; i++) {
        int x, y, z;
        scanf("%d %d %d", &x, &y, &z);
        Adj[x].push_back(Node(y, 1 - (double)z / 100.0));
    }
    int A, B;
    scanf("%d %d", &A, &B);
    SPFA(A);
    printf("%.8lf", 100.0 / d[B]);

    return 0;
}
2021/3/21 01:06
加载中...