Submission #210844

#TimeUsernameProblemLanguageResultExecution timeMemory
210844brcodeMergers (JOI19_mergers)C++14
100 / 100
1766 ms91100 KiB
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 5e5+5;
int ans;
int leaves;
vector<int> col[MAXN];
vector<pair<int,int>> edges;
int depth[MAXN];
int dsu[MAXN];
int par[MAXN];
int cnt[MAXN];
vector<int> v1[MAXN];
int find(int curr){
    if(dsu[curr] == curr){
        return curr;
    }
    return dsu[curr] = find(dsu[curr]);
}
void dfs(int curr,int p,int d){
    
    par[curr] = p;
    dsu[curr] = curr;
    depth[curr] = d;
    for(int x:v1[curr]){
        if(x!=p){
            dfs(x,curr,d+1);
        }
    }
}
int main() {
    int n,m;
    cin>>n>>m;
    for(int i=1;i<n;i++){
        int x,y;
        cin>>x>>y;
        v1[x].push_back(y);
        v1[y].push_back(x);
        edges.push_back(make_pair(x,y));
    }
    for(int i=1;i<=n;i++){
        int c;
        cin>>c;
        col[c].push_back(i);
        
    }
    dfs(1,1,1);
    for(int i=1;i<=m;i++){
        for(int j=1;j<col[i].size();j++){
            int a = find(col[i][j-1]);
            int b = find(col[i][j]);
            
            while(a!=b){
                if(depth[a]<depth[b]){
                    swap(a,b);
                }
                
                dsu[a] = find(par[a]);
                a = dsu[a];
                //cout<<find(2)<<endl;
            }
            
        }
    }
    for(auto e:edges){
        int a = find(e.first);
        int b = find(e.second);
        
        if(a!=b){
            cnt[a]++;
            cnt[b]++;
        }
        
    }
    for(int i=1;i<=n;i++){
        if(cnt[i] == 1){
            leaves++;
        }
    }
   
    if(leaves == 1){
        cout<<0<<endl;
        return 0;
    }
    cout<<(leaves+1)/2<<endl;
    
}

Compilation message (stderr)

mergers.cpp: In function 'int main()':
mergers.cpp:49:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         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...