Submission #841651

#TimeUsernameProblemLanguageResultExecution timeMemory
841651BatrrBeech Tree (IOI23_beechtree)C++17
0 / 100
2009 ms54004 KiB
#include "beechtree.h" #include <bits/stdc++.h> #define f first #define s second #define pb push_back #define mp make_pair using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<long long, long long> pll; const int N = 300500, inf = 1e9, mod = 998244353; const ll INF = 1e18; vector<pii> g[N]; int n, m; int ans[N]; int P[N], C[N]; vector<int> t[N]; int get(int v, int u) { if (g[v].size() > g[u].size()) return -1; if (g[v].size() < g[u].size()) return 1; for (int i = 0; i < g[v].size(); i++) { int x = get(g[v][i].s, g[u][i].s); if (x != 0) return x; } return 0; } bool cmp(int v, int u) { return get(v, u) == -1; } void dfs(int v) { t[v].pb(v); for (auto it: g[v]) { int to = it.s; dfs(to); for (auto x: t[to]) t[v].pb(x); } sort(t[v].begin() + 1, t[v].end(), cmp); bool ok = 1; ok &= (t[v][0] == v); for (int i = 1; i < t[v].size(); i++) { int cnt = 0; for (int j = 1; j < i; j++) if (C[t[v][i]] == C[t[v][j]]) cnt++; ok &= (t[v][cnt] == P[t[v][i]]); } ans[v] |= ok; } vector<int> beechtree(int N, int M, vector<int> PP, vector<int> CC) { n = N; for (int i = 0; i < n; i++) { g[i].clear(); t[i].clear(); P[i] = PP[i]; C[i] = CC[i]; ans[i] = 0; } for (int i = 1; i < n; i++) g[P[i]].pb({C[i], i}); for (int i = 0; i < n; i++) sort(g[i].begin(), g[i].end()); dfs(0); return vector<int>(ans, ans + n); }

Compilation message (stderr)

beechtree.cpp: In function 'int get(int, int)':
beechtree.cpp:30:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |     for (int i = 0; i < g[v].size(); i++) {
      |                     ~~^~~~~~~~~~~~~
beechtree.cpp: In function 'void dfs(int)':
beechtree.cpp:54:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     for (int i = 1; i < t[v].size(); i++) {
      |                     ~~^~~~~~~~~~~~~
#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...