답안 #280085

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
280085 2020-08-22T13:25:22 Z 3zp Mergers (JOI19_mergers) C++14
0 / 100
234 ms 21112 KB
#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(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;
}

Compilation message

mergers.cpp:47:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   47 | main(){
      |      ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 12160 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 12160 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 12160 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 180 ms 18480 KB Output is correct
2 Correct 211 ms 20336 KB Output is correct
3 Correct 13 ms 12416 KB Output is correct
4 Correct 13 ms 12416 KB Output is correct
5 Correct 8 ms 12160 KB Output is correct
6 Correct 9 ms 12160 KB Output is correct
7 Correct 13 ms 12416 KB Output is correct
8 Correct 230 ms 21112 KB Output is correct
9 Correct 13 ms 12416 KB Output is correct
10 Incorrect 234 ms 20440 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 12160 KB Output isn't correct
2 Halted 0 ms 0 KB -