# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1178850 | irmuun | Mergers (JOI19_mergers) | C++20 | 3091 ms | 40980 KiB |
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()
const ll N=5e5+5;
ll n,k;
vector<ll>g[N];
ll s[N],par[N],cnt[N],col[N],sub[N],ex[N];
bool flag[N];
void dfs(ll x,ll p){
par[x]=p;
sub[x]=1;
for(ll y:g[x]){
if(y!=p){
dfs(y,x);
sub[x]+=sub[y];
}
}
}
set<ll>solve(ll x){
set<ll>colors;
vector<set<ll>>v;
ll j=-1,mx=0;
for(ll y:g[x]){
if(y!=par[x]){
v.pb(solve(y));
if(v.back().size()>mx){
mx=v.back().size();
j=v.size()-1;
ex[x]=ex[y];
}
}
}
v.pb({s[x]});
if(j>-1){
colors=v[j];
}
for(ll i=0;i<v.size();i++){
if(i!=j){
for(ll c:v[i]){
if(colors.count(c)==0){
colors.insert(c);
ex[x]+=cnt[c];
}
}
}
}
if(ex[x]==sub[x]){
flag[x]=true;
}
return colors;
}
ll go(){
queue<ll>r;//roots
r.push(1);
ll cur=0;
while(!r.empty()){
ll x=r.front();
r.pop();
cur++;
queue<ll>q;
q.push(x);
while(!q.empty()){
ll i=q.front();
q.pop();
col[i]=cur;
for(ll j:g[i]){
if(j==par[i]) continue;
if(flag[j]){
r.push(j);
}
else{
q.push(j);
}
}
}
}
for(ll i=1;i<=n;i++){
g[i].clear();
}
for(ll i=2;i<=n;i++){
if(flag[i]){
g[col[i]].pb(col[par[i]]);
g[col[par[i]]].pb(col[i]);
}
}
ll leaf=0;
for(ll i=1;i<=cur;i++){
if(g[i].size()==1){
leaf++;
}
}
return leaf;
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>n>>k;
for(ll i=1;i<n;i++){
ll a,b;
cin>>a>>b;
g[a].pb(b);
g[b].pb(a);
}
for(ll i=1;i<=n;i++){
cin>>s[i];
cnt[s[i]]++;
}
dfs(1,1);
fill(flag,flag+N+1,false);
solve(1);
ll leaf=go();
cout<<(leaf+1)/2;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |