Submission #938227

#TimeUsernameProblemLanguageResultExecution timeMemory
938227LittleOrangeUnique Cities (JOI19_ho_t5)C++17
4 / 100
2045 ms42604 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; int main(){ ios::sync_with_stdio(0);cin.tie(0); ll n,m; cin >> n >> m; vector<vector<ll>> con(n); vector<ll> c(n); for(ll i = 1;i<n;i++){ ll u,v; cin >> u >> v; con[u-1].push_back(v-1); con[v-1].push_back(u-1); } for(ll &i : c) cin >> i; vector<ll> d(n,0),p(n,0); { function<void(ll)> dfs; dfs = [&](ll i){ for(ll j : con[i]) if(j!=p[i]){ p[j] = i; d[j] = d[i]+1; dfs(j); } }; dfs(0); } vector<vector<ll>> pp(20,vector<ll>(n)); pp[0] = p; for(ll i = 1;i<20;i++){ for(ll j = 0;j<n;j++){ pp[i][j] = pp[i-1][pp[i-1][j]]; } } function<ll(ll,ll)> dis = [&](ll a, ll b){ if (d[a]<d[b]) swap(a,b); //cerr << "dis " << a << " " << b << endl; ll da = d[a]; ll db = d[b]; ll x = da-db; while(x){ a = pp[__builtin_ctzll(x)][a]; x -= x&-x; } //cerr << "dis " << a << " " << b << endl; for(ll j = 19;j>=0;j--){ if (pp[j][a]!=pp[j][b]){ a = pp[j][a]; b = pp[j][b]; } } if(a!=b) a = p[a]; return da+db-d[a]*2; };//cerr << "cp1\n"; for(ll i = 0;i<n;i++){ map<ll,ll> cnt; for(ll j = 0;j<n;j++) if(i!=j){ cnt[dis(i,j)]++; } set<ll> s; for(ll j = 0;j<n;j++) if(i!=j){ if(cnt[dis(i,j)]==1){ s.insert(c[j]); } } cout << s.size() << "\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...