답안 #1106243

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1106243 2024-10-29T15:59:38 Z nh0902 Mag (COCI16_mag) C++14
108 / 120
324 ms 167240 KB
#include <bits/stdc++.h>

using namespace std;

const int N = 1100000;

const long long inf = LLONG_MAX;

int n, pa[N];

long long X[N], P, Q, down[N], up[N];

vector<int> g[N];

long long pre_dfs(int u, int p) {
    long long l = 1;
    pa[u] = p;
    for (int v : g[u]) if (v != p) {
        l = max(l, pre_dfs(v, u) + 1);
    }

    if (X[u] > 1) {
        down[u] = 0;
    } else {
        down[u] = l;
    }
    //cout << u << " : " << down[u] << "\n";
    return down[u];
}

void BFS(int u, int p) {

    long long l1 = up[pa[u]];
    long long l2 = 0;
    for (int v : g[u]) if (v != p) {
        l2 = max(l2, down[v]);
        if (l2 > l1) swap(l1, l2);
    }

    long long new_P = X[u];
    long long new_Q = 1 + l1 + l2;
    //cout << u << " : " << new_P << " , " << new_Q;
    if (new_P * Q < new_Q * P) {
        P = new_P;
        Q = new_Q;
    }

    if (X[u] > 1) up[u] = 0;
    else up[u] = up[pa[u]] + 1;
    //cout << " , " << up[u] << "\n";
    for (int v : g[u]) if (v != p) {
        BFS(v, u);
    }
}

long long gcd(long long a, long long b) {
    long long r = b % a;
    if (r == 0) return a;
    return gcd(r, a);
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n;

    int a, b;
    for (int i = 1; i < n; i ++) {
        cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }

    bool has_1 = false;
    for (int i = 1; i <= n; i ++) {
        cin >> X[i];
        if (X[i] == 1) {
            has_1 = true;
        }
    }

    if (!has_1) {
        P = X[1];
        for (int i = 1; i <= n; i ++) {
            P = min(P, X[i]);
        }
        cout << P << "/" << "1";
        return 0;
    }

    P = 1;
    Q = 1;

    pre_dfs(1, 1);
    BFS(1, 1);

    long long d = gcd(P, Q);
    cout << P/d << "/" << Q/d;

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 29264 KB Output is correct
2 Correct 5 ms 33360 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 33360 KB Output is correct
2 Correct 6 ms 33360 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 204 ms 103980 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 33360 KB Output is correct
2 Correct 324 ms 164424 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 301 ms 147528 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 219 ms 87020 KB Output is correct
2 Correct 180 ms 88136 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 205 ms 88864 KB Output is correct
2 Correct 39 ms 42312 KB Output is correct
3 Correct 314 ms 167240 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 40784 KB Output is correct
2 Correct 240 ms 102728 KB Output is correct
3 Correct 211 ms 71456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 219 ms 85440 KB Output is correct
2 Correct 224 ms 103648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 222 ms 87560 KB Output is correct
2 Correct 204 ms 71500 KB Output is correct