Submission #716272

#TimeUsernameProblemLanguageResultExecution timeMemory
716272Ahmed57Mergers (JOI19_mergers)C++14
70 / 100
81 ms25064 KiB
#include <bits/stdc++.h>

using namespace std;
vector<int> adj[200001];
int dep[200001] , par[200001];
//DSU
int pr[200001];
int gs[200001];

int findleader(int x){
    if(pr[x]==x){
        return x;
    }
    return pr[x] = findleader(pr[x]);
}
void mergegroup(int x,int y){
    int led1 = findleader(x);
    int led2 = findleader(y);
    if(led1==led2)return;
    if(gs[led1]>gs[led2]){
        pr[led2]=led1;
        gs[led1]+=gs[led2];
    }else{
        pr[led1]=led2;
        gs[led2]+=gs[led1];
    }
}
void merge(int a,int b){
    while(a!=b){
        if(dep[a] < dep[b])swap(a, b);
        pr[a]=findleader(par[a]);
        a = pr[a];
    }
}
void dfs(int i ,int prr){
    par[i] = prr;
    dep[i] = dep[prr]+1;
    for(auto j:adj[i]){
        if(j!=prr)dfs(j,i);
    }
}
signed main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int n,k;
    cin>>n>>k;
    for(int i = 0;i<=n;i++){
        gs[i] = 1, pr[i] = i;
    }
    vector<int> col[k+1];
    for(int i = 0;i<n-1;i++){
        int a,b;
        cin>>a>>b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
    dfs(1,0);
    for(int i = 1;i<=n;i++){
        int x;cin>>x;
        col[x].push_back(i);
    }
    for(int i = 1;i<=k;i++){
        for(int j = 1;j<col[i].size();j++){
            merge(col[i][0],col[i][j]);
        }
    }
    int deg[n+1] = {0};
    for(int i = 1;i<=n;i++){
        for(auto j:adj[i]){
            if(findleader(i)!=findleader(j)){
                deg[findleader(i)]++;deg[findleader(j)]++;
            }
        }
    }
    int cnt = 0;
    for(int i = 1;i<=n;i++){
        if(deg[i]==2){
            cnt++;
        }
    }
    cout<<(cnt+1)/2<<"\n";
}

Compilation message (stderr)

mergers.cpp: In function 'int main()':
mergers.cpp:62:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         for(int j = 1;j<col[i].size();j++){
      |                       ~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...