Submission #486838

# Submission time Handle Problem Language Result Execution time Memory
486838 2021-11-12T23:03:16 Z julian33 Inspection (POI11_ins) C++14
0 / 100
1176 ms 121816 KB
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {
    cerr<<vars<<" = ";
    string delim="";
    (...,(cerr<<delim<<values,delim=", "));
    cerr<<"\n";
}
#else
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {}
#endif

#define pb push_back
#define sz(x) (int)(x.size())
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
template<typename T> inline void maxa(T& a,T b){a=max(a,b);}
template<typename T> inline void mina(T& a,T b){a=min(a,b);} 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int mxN=1e6+5; //make sure this is right
const int mod=1e9+7;

vector<int> graph[mxN];
ll sub[mxN],sub2[mxN],up[mxN],down[mxN],par[mxN],dp[mxN],dp2[mxN],mx[mxN];

void dfs(int at,int p){
    sub[at]=1;
    for(int &i:graph[at]){
        if(i==p) continue;
        par[i]=at;
        dfs(i,at);
        sub[at]+=sub[i];
        dp[at]+=dp[i]+sub[i];
        maxa(down[at],down[i]+1);
        maxa(mx[at],sub[i]);
    }
}

void dfs2(int at,int p){
    vector<ll> all;
    for(int &i:graph[at]){
        if(i==p) continue;
        all.pb(down[i]);
    }
    sort(all.rbegin(),all.rend());
    for(int &i:graph[at]){
        if(i==p) continue;
        up[i]=up[at]+1;
        if(all[0]!=down[i]) maxa(up[i],all[0]+2);
        else if(sz(all)>1) maxa(up[i],all[1]+2);
        dp2[i]=dp2[at]+sub2[at]+dp[at]-dp[i]+sub[at]-2*sub[i];
        sub2[i]=sub[at]-sub[i]+sub2[at];
        dfs2(i,at);
    }
}

int main(){
    cin.sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    #ifdef LOCAL
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
    #endif

    int n; cin>>n;
    for(int i=1;i<n;i++){
        int a,b; cin>>a>>b;
        graph[a].pb(b);
        graph[b].pb(a);
    }
    dfs(1,-1);
    dfs2(1,-1);
    for(int i=1;i<=n;i++){
        ll rem=n-sub[i];
        if(2*max(rem,mx[i])>n) cout<<-1<<"\n";
        else cout<<2*(dp[i]+dp2[i])-max(up[i],down[i])<<"\n";
    }
}
# Verdict Execution time Memory Grader output
1 Incorrect 14 ms 23756 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 13 ms 23756 KB Output is correct
2 Incorrect 14 ms 23756 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 13 ms 23972 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 22 ms 25804 KB Output is correct
2 Incorrect 22 ms 26648 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 33 ms 27636 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 89 ms 33680 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 551 ms 72792 KB Output is correct
2 Incorrect 538 ms 94444 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1176 ms 121816 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1172 ms 121808 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1172 ms 121792 KB Output isn't correct
2 Halted 0 ms 0 KB -