제출 #1242500

#제출 시각아이디문제언어결과실행 시간메모리
1242500bangan참나무 (IOI23_beechtree)C++20
9 / 100
49 ms16708 KiB
#include "beechtree.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define ALL(a) a.begin(), a.end()

const int MXN = 200200;

int n;
int m;
vector<int> p;
vector<int> c;
vector<int> adj[MXN];

bool is_subset(vector<int> a, vector<int> b) {
    set<int> all;
    for (int x : b) all.insert(c[x]);
    for (int x : a) if (!all.contains(c[x])) return false;
    return true;
}

vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) {
    n = N;
    m = M;
    p = P;
    c = C;
    for (int i=1; i<n; i++) adj[p[i]].pb(i);

    vector<int> ans(n);
    vector<vector<int>> vec;

    for (int v : adj[0]) {
        vec.pb({});
        for (int u : adj[v]) vec.back().pb(u), ans[u] = 1;

        sort(ALL(vec.back()), [&](int x, int y) {
            return c[x]<c[y];
        });  

        ans[v] = 1;
        for (int i=0; i+1 < vec.back().size(); i++) if (c[vec.back()[i]] == c[vec.back()[i+1]]) ans[v] = 0;
    }

    sort(ALL(vec), [&](auto x, auto y) {
        return x.size() < y.size();
    });

    vec.pb({});
    for (int v : adj[0]) vec.back().pb(v);


    sort(ALL(vec.back()), [&](int x, int y) {
        return c[x]<c[y];
    });  

    ans[0] = 1;
    for (int i=0; i+1 < vec.back().size(); i++) if (c[vec.back()[i]] == c[vec.back()[i+1]]) ans[0] = 0;
    for (int v : adj[0]) if (ans[v]==0) ans[0] = 0;
    for (int i=1; i<vec.size(); i++) if (!is_subset(vec[i-1], vec[i])) ans[0] = 0;
    return ans;
}
#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...
#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...