Submission #98341

# Submission time Handle Problem Language Result Execution time Memory
98341 2019-02-22T16:43:37 Z dalgerok Mag (COCI16_mag) C++17
12 / 120
791 ms 215088 KB
#include<bits/stdc++.h>
using namespace std;


const int N = 1e6 + 5;


int n, a[N], dp_down[N], dp_up[N];
int ans1 = -1, ans2 = -1;
vector < int > g[N];

inline void upd(int &x, int y){
    if(x < y){
        x = y;
    }
}

void dfs1(int v, int pr = -1){
    for(int to : g[v]){
        if(to != pr){
            dfs1(to, v);
            upd(dp_down[v], dp_down[to]);
        }
    }
    if(a[v] != 1){
        dp_down[v] = 0;
    }
}

void dfs2(int v, int pr = -1){
    if(pr != -1){
        g[v].erase(find(g[v].begin(), g[v].end(), pr));
    }
    int sz = (int)g[v].size();
    vector < int > pref(sz + 2), suf(sz + 2);
    for(int i = 1; i <= sz; i++){
        pref[i] = max(pref[i - 1], dp_down[g[v][i - 1]] + (a[g[v][i - 1]] == 1));
    }
    for(int i = sz; i >= 1; i--){
        suf[i] = max(suf[i + 1], dp_down[g[v][i - 1]] + (a[g[v][i - 1]] == 1));
    }
    for(int i = 1; i <= sz; i++){
        int to = g[v][i - 1];
        if(a[v] == 1){
            dp_up[to] = max({pref[i - 1], suf[i + 1], dp_up[v]}) + 1;
        }
        else{
            dp_up[to] = 0;
        }
        dfs2(to, v);
    }
}

inline void check(int x, int y){
    /// x / y < ans1 / ans2;
    /// x * ans2 < ans1 * y;
    if(ans1 == -1){
        ans1 = x;
        ans2 = y;
    }
    else if(1LL * x * ans2 < 1LL * ans1 * y){
        ans1 = x;
        ans2 = y;
    }
}

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin >> n;
    for(int i = 1; i < n; i++){
        int x, y;
        cin >> x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    dfs1(1);
    dfs2(1);
    for(int i = 1; i <= n; i++){
        int x = a[i], y = 1 + dp_up[i] + dp_down[i];
        check(x, y);
    }
    int g = __gcd(ans1, ans2);
    cout << ans1 << "/" << ans2;
}

Compilation message

mag.cpp: In function 'int main()':
mag.cpp:85:9: warning: unused variable 'g' [-Wunused-variable]
     int g = __gcd(ans1, ans2);
         ^
# Verdict Execution time Memory Grader output
1 Correct 28 ms 23928 KB Output is correct
2 Correct 28 ms 23928 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 28 ms 23936 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 567 ms 121028 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 26 ms 23808 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 791 ms 215088 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 645 ms 70080 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 608 ms 70764 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 180 ms 29784 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 525 ms 68708 KB Output is correct
2 Incorrect 631 ms 66496 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 603 ms 71280 KB Output is correct
2 Incorrect 630 ms 47980 KB Output isn't correct