Submission #1295758

#TimeUsernameProblemLanguageResultExecution timeMemory
1295758trantrungkeinUnique Cities (JOI19_ho_t5)C++20
0 / 100
77 ms14116 KiB
#include<bits/stdc++.h>
using namespace std;
const int N = 4e5 + 7;
int vis[N],par[N],num[N],r[N],up[N],down[N],n,l[N];
vector<int> g[N];
int node1, node2, maxx, diameter = 0;
void dfs(int u, int p, int len, int& node){
    if(len > maxx){
        maxx = len;
        node = u;
    }
    for(int v : g[u]) if(v != p) {
        dfs(v,u,len+1,node);
    }
}
void line(int u, int p){
    for(int v : g[u]) if(v != p){
        line(v,u);
        par[v] = u;
    }
}
vector<int> Line;
void push_down(int u, int p,int root){
    for(int v : g[u]) if(v != p && !vis[v]){
        num[v] = root;
        down[v] = down[u] + 1;
        push_down(v,u,root);
        up[u] = max(up[v]+1,up[u]);
    }
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int m;
    cin >> n >> m;
    for(int i = 1; i < n; i++){
        int u,v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    for(int i = 1; i <= n; i++) {int x;cin >> x;}
    maxx = 0;
    dfs(1,0,0,node1);
    maxx = 0;
    dfs(node1,0,0,node2);
    diameter = maxx;
    line(node1,0);
    int tmp2 = node2;
    Line.push_back(tmp2);
    while(tmp2 != node1){
        tmp2 = par[tmp2];
        Line.push_back(tmp2);
    }
    for(int id : Line) vis[id] = true;
    for(int i = 0; i < Line.size(); i++){
        l[Line[i]] = i;
        r[Line[i]] = Line.size() - 1 - i;
        push_down(Line[i],0,Line[i]);
    }
    for(int i = 1; i <= n; i++){
        if(num[i] == 0){
            if(l[i] != r[i]) cout << 1;
            else cout << 0;
        }
        else {
            if(l[num[i]] != r[num[i]]) cout << 1;
            else{
                if(down[i] > up[i]) cout << 1;
                else cout << 0;
            }
        }
        cout <<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...