正推为什么错
查看原帖
正推为什么错
524191
Man_CCNU楼主2022/12/26 20:05
#include<iostream>
#include<queue>

using namespace std;

const int N = 1e6 + 10;

int h[N], e[N], ne[N], w[N], d[N],rd[N], n, m, idx = 1;
int rh[N], re[N], rne[N], rw[N], ridx = 1;
double dis[N];
queue<int>que;

void connec(int x, int y, int z)
{
    e[idx] = y;
    ne[idx] = h[x];
    w[idx] = z;
    h[x] = idx;
    idx++;
}
void connec_(int x, int y, int z)
{
    re[ridx] = y;
    rne[ridx] = rh[x];
    rw[ridx] = z;
    rh[x] = ridx;
    ridx++;
}
void dfs(int u)
{
    que.push(u);
    while (que.size()) {
        int t = que.front();
        que.pop();
        for (int i = rh[t]; i; i = rne[i]) {
            int j = re[i];
            dis[t] += ((dis[j] + rw[i]) / double(rd[t]));
        }
        for (int i = h[t]; i; i = ne[i]) {
            int j = e[i];
            d[j]--;
            if (d[j] == 0) {
                que.push(j);
            }
        }
    }
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        int x, y, z;
        cin >> x >> y >> z;
        d[y]++;
        rd[y]++;
        connec(x, y, z);
        connec_(y, x, z);
    }
    dfs(1);
    printf("%.2f\n", dis[n]);

    return 0;
}
2022/12/26 20:05
加载中...