제출 #1273970

#제출 시각아이디문제언어결과실행 시간메모리
1273970nicolo_010참나무 (IOI23_beechtree)C++20
0 / 100
38 ms16036 KiB
#include <bits/stdc++.h> #include "beechtree.h" using namespace std; using ll = long long; using pii = pair<int, int>; vector<vector<int>> adj; vector<int> sz; bool cmp(int a, int b) { return sz[a] < sz[b]; } vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) { adj.resize(N); sz.resize(N); for (int i=1; i<N; i++) { adj[P[i]].push_back(i); } for (int i=0; i<N; i++) { sz[i] = adj[i].size(); } for (int i=0; i<N; i++) { sort(adj[i].begin(), adj[i].end(), cmp); } vector<bool> valid(N, false); for (int i=0; i<N; i++) { map<int, int> mp; for (auto x : adj[i]) { mp[C[x]]++; } if (mp.size() == adj[i].size()) valid[i] = true; else valid[i] = false; } vector<int> ans(N, 0); for (int i=0; i<N; i++) { vector<int> p; p.push_back(i); queue<int> q; q.push(i); vector<int> mp(3, 0); bool can = true; while (!q.empty()) { int u = q.front(); q.pop(); if (!valid[u]) can = false; for (auto x : adj[u]) { if (p[mp[C[x]]] != P[x]) can = false; q.push(x); p.push_back(x); mp[C[x]]++; } } if (can) ans[i] = 1; } 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...