제출 #280089

#제출 시각아이디문제언어결과실행 시간메모리
2800893zpMergers (JOI19_mergers)C++14
100 / 100
1715 ms78092 KiB
#include<bits/stdc++.h>
using namespace std;
const int mN = 500009;
vector<int> V[mN];
int L[mN],R[mN], A[mN], St[mN], En[mN], S[mN], Good[mN], Deg[mN], Sz[mN], Min[mN], Max[mN];
int c = 1;
int good_cnt = 0;
void dfs1(int x, int p){
    L[x] = c;
    R[x] = c;
    A[c] = x;
    c++;
    for(int y : V[x]){
        if(y == p) continue;
        dfs1(y, x);
        R[x] = R[y];
    }
}
void dfs2(int x, int p){
    if(Good[x]) Sz[x] = 1;
    for(int y : V[x]){
        if(y == p) continue;
        dfs2(y, x);
        Sz[x] += Sz[y];
    }

    if(x > 1 && (Good[x] || (Sz[x] > 0 && Sz[x] < good_cnt))){
        Deg[x]++;
        Deg[p]++;
    }
}
void dfs3(int x, int p){
    Min[x] = St[S[x]];
    Max[x] = En[S[x]];
    for(int y : V[x]){
        if(y == p) continue;
        dfs3(y, x);
        Min[x] = min(Min[x], Min[y]);
        Max[x] = max(Max[x], Max[y]);
    }
    if(x > 1 && Min[x] == L[x] && Max[x] == R[x]){
        Good[x] = 1;
        good_cnt++;
    }

}
main(){
    int n, k;
    cin >> n >> k;
    for(int i = 1; i < n; i++){
        int a, b;
        cin >> a >> b;
        V[a].push_back(b);
        V[b].push_back(a);
    }
    for(int i = 1; i <= n; i++)
        cin >> S[i];
    dfs1(1, 0);
    for(int i = 1; i <= n; i++){
        int x = A[i];
        if(!St[S[x]]) St[S[x]] = i;
        En[S[x]] = i;
    }
    dfs3(1, 0);
    dfs2(1, 0);
    int leaf_cnt = 0;
    for(int i = 1; i <= n; i++)
        if(Deg[i] == 1) leaf_cnt++;
    cout << (leaf_cnt + 1) / 2 << endl;
}

컴파일 시 표준 에러 (stderr) 메시지

mergers.cpp:47:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   47 | main(){
      |      ^
#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...