[10.4シミュレートレース] T2

T2

説明

従来の\(N- \)点、\(m個\)図の自由端にバー。これは、必要な数から決定される\(1 \)番号にポイントを\(\ N-)エッジ重み介してエッジ点の絶対値と最小パス。元の右側がXである場合、特に、片側の経過毎に、図の右側のすべての側面が変更され、新しい右側である(\ {\ {FRAC。1. 1-X}})\
小数点以下3桁への回答

入力

二つの整数の最初の行\(m個\)、\ (n-は\) 点とエッジを表します。

\(m個\)三つの整数の行\(U \)、\ (V \)、\ (X \) 接続があることを示し\(U \)、\ (V \)は右端、ビット\(X- \)

出力

場合\(1 \)\(N- \)ユニコム、右側の絶対値の最小値出力と
そうでない場合は出力は「チューするREN市ZHI張TI」 ( 引用符なしに)。

サンプル入力

サンプル出力

データ制約

以下のための\(30 \)データの%、- \(<= 500 \ n)は

解決

コード

#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
#define eps 0.00001
#define MAXN 5000100
struct rec {
    int nxt, ver;
    double dis;
} t[MAXN];
struct Rec {
    int k;
    double w;
};
bool operator < (const Rec &x, const Rec &y) {
    return x.w > y.w;
}
int n, m, u, v, x, cnt;
int head[MAXN];
bool flag[MAXN];
Rec s;
priority_queue <Rec> h;
inline int read() {
    int s = 0, w = 1;
    char c = getchar();
    for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;
    for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);
    return s * w;
}
inline void add(int u, int v, double w) {
    t[++cnt].nxt = head[u], t[cnt].ver = v, t[cnt].dis = w, head[u] = cnt;
}
int main() {
    freopen("pb.in", "r", stdin);
    freopen("pb.out", "w", stdout);
    n = read(), m = read();
    for (register int i = 1; i <= m; i++) {
        u = read(), v = read(), x = read();
        double w = x;
        add(u, v + n, fabs(w)), add(v, u + n, fabs(w));
        add(u + n, v + 2 * n, fabs(1 / (1 - w))), add(v + n, u + 2 * n, fabs(1 / (1 - w)));
        add(u + 2 * n, v, fabs(1 - 1 / w)), add(v + 2 * n, u, fabs(1 - 1 / w));
    }
    h.push((Rec){1, 0});
    while (!h.empty()) {
        s = h.top();
        h.pop();
        if (flag[s.k]) continue;
        flag[s.k] = true;
        if (s.k == n || s.k == 2 * n || s.k == 3 * n) break;
        for (register int i = head[s.k]; i; i = t[i].nxt) {
            int v = t[i].ver;
            if (!flag[v])
                h.push((Rec){v, s.w + t[i].dis});
        }
    }
    if (s.w <= eps) printf("chu ti ren shi zhi zhang");
    else printf("%.3f", s.w);
    return 0;
}

おすすめ

転載: www.cnblogs.com/Agakiss/p/11621944.html