Submission #1319954

#TimeUsernameProblemLanguageResultExecution timeMemory
1319954JuanJLUnique Cities (JOI19_ho_t5)C++20
4 / 100
2095 ms15884 KiB
#include <bits/stdc++.h> #define fst first #define snd second #define pb push_back #define SZ(x) (int)x.size() #define ALL(x) x.begin(),x.end() #define forn(i,a,b) for(int i = a; i<b; i++) #define mset(a,v) memset(a,v,sizeof(a)) #define FIN ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); using namespace std; typedef long long ll; const int MAXN = 200000+5; ll n,m; vector<ll> adj[MAXN]; ll dist1[MAXN]; ll dist2[MAXN]; ll eti[MAXN]; void dfs(ll nd, ll p,ll dis, ll t){ if(t==1){ dist1[nd]=dis; }else{ dist2[nd]=dis; } for(auto i:adj[nd]) if(i!=p){ dfs(i,nd,dis+1,t); } } void ndfs(ll nd, ll p, ll dis, map<ll,vector<ll>> &mp){ mp[dis].pb(eti[nd]); for(auto i:adj[nd]) if(i!=p){ ndfs(i,nd,dis+1,mp); } } int main(){ cin>>n>>m; ll u,v; forn(i,0,n-1){ cin>>u>>v; u--; v--; adj[u].pb(v); adj[v].pb(u); } forn(i,0,n) cin>>eti[i]; dfs(0,-1,0,1); pair<ll,ll> d1 = {-1,0}; forn(i,0,n) d1=max(d1,{dist1[i],i}); dfs(d1.snd,-1,0,2); pair<ll,ll> d2 = {-1,0}; forn(i,0,n) d2=max(d2,{dist2[i],i}); forn(i,0,n){ map<ll,vector<ll>> mp; ndfs(i,-1,0,mp); set<ll> s; for(auto i:mp){ if(SZ(i.snd)==1 && i.fst!=0) s.insert(i.snd[0]); } cout<<SZ(s)<<'\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...