제출 #217761

#제출 시각아이디문제언어결과실행 시간메모리
217761VEGAnnMag (COCI16_mag)C++14
120 / 120
537 ms150904 KiB
#include <bits/stdc++.h>
#define sz(x) ((int)x.size())
#define pii pair<int, int>
#define ft first
#define sd second
#define all(x) x.begin(),x.end()
using namespace std;
typedef long double ld;
typedef long long ll;
const int N = 1000100;
const ll OO = 1e18;
const int oo = 2e9;
vector<int> g[N];
int n, mn, a[N], ansp, ansq, mx[N], mx1[N], mx2[N];

bool smaller(int p, int q){
    return ll(p) * ll(ansq) < ll(ansp) * ll(q);
}

void dfs(int v, int p){
    mx1[v] = mx2[v] = 0;
    for (int u : g[v]){
        if (u == p) continue;
        dfs(u, v);
        if (mx1[v] < mx[u]){
            mx2[v] = mx1[v];
            mx1[v] = mx[u];
        } else if (mx2[v] < mx[u])
            mx2[v] = mx[u];
    }
    if (a[v] == 1)
        mx[v] = mx1[v] + 1;
    else mx[v] = 0;
}

void DFS(int v, int p, int cr){
    for (int u : g[v]){
        if (u == p) continue;
        int Cr = 0;
        if (a[v] == 1) {
            if (mx[u] == mx1[v])
                Cr = max(cr + 1, mx2[v] + 1);
            else Cr = max(cr + 1, mx1[v] + 1);
        }
        DFS(u, v, Cr);
    }
    int Mx1 = mx1[v], Mx2 = mx2[v];
    if (Mx1 < cr){
        Mx2 = Mx1;
        Mx1 = cr;
    } else if (Mx2 < cr)
        Mx2 = cr;
    if (smaller(a[v], Mx1 + Mx2 + 1)){
        ansp = a[v];
        ansq = Mx1 + Mx2 + 1;
    }
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
//    freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);
    cin >> n;
    for (int i = 1; i < n; i++){
        int u, v;
        cin >> u >> v;
        u--; v--;
        g[v].push_back(u);
        g[u].push_back(v);
    }
    mn = oo;
    for (int i = 0; i < n; i++){
        cin >> a[i];
        mn = min(mn, a[i]);
    }
    if (mn > 1){
        cout << mn << "/1";
        return 0;
    }
    ansp = ansq = 1;
    dfs(0, -1);
    DFS(0, -1, 0);
    int gc = __gcd(ansp, ansq);
    cout << ansp / gc << "/" << ansq / gc << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...