# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1178843 | irmuun | Mergers (JOI19_mergers) | C++20 | 3096 ms | 24352 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];
bool flag[N];
void dfs(ll x,ll p){
par[x]=p;
for(ll y:g[x]){
if(y!=p){
dfs(y,x);
}
}
}
bool solve(ll i){
queue<ll>q;
q.push(i);
set<ll>st;
ll sub=0;
while(!q.empty()){
ll x=q.front();
q.pop();
sub++;
st.insert(s[x]);
for(ll y:g[x]){
if(y!=par[x]){
q.push(y);
}
}
}
ll tot=0;
for(ll c:st){
tot+=cnt[c];
}
if(tot==sub){//seperated
return true;
}
return false;
}
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);
for(ll i=2;i<=n;i++){
if(solve(i)){
flag[i]=true;
}
}
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... |