This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "beechtree.h"
#include<bits/stdc++.h>
using namespace std;
#define rep(a, b) for(int a = 0; a < (b); ++a)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
const int LIM=2e5+7;
vector<pair<int,int>>V[LIM], K[LIM];
vector<int>ans;
int ile[LIM];
void DFS(int x) {
ile[x]=1;
for(auto i : V[x]) {
DFS(i.nd);
ile[x]+=ile[i.nd];
K[x].pb({ile[i.nd], i.nd});
}
sort(all(K[x]));
reverse(all(K[x]));
for(int i=1; i<V[x].size(); ++i) if(V[x][i-1].st==V[x][i].st) ans[x]=0;
}
bool zawiera(int a, int b) {
if(V[a].size()>V[b].size()) return false;
int l=0;
rep(i, V[a].size()) {
while(l<V[b].size() && V[b][l].st!=V[a][i].st) ++l;
if(l==V[b].size()) return false;
if(ile[V[a][i].nd]>ile[V[b][l].nd]) return false;
}
return true;
}
bool dodaj(set<pair<int,int>>&S, pair<int,int>x) {
auto it=S.lower_bound(x);
if(it!=S.end()) {
auto p=*it;
if(!zawiera(x.nd, p.nd)) return false;
}
if(it!=S.begin()) {
--it;
auto p=*it;
if(!zawiera(p.nd, x.nd)) return false;
}
S.insert(x);
return true;
}
void DFS2(int x, set<pair<int,int>>&S) {
if(K[x].size()==0) {
S.insert({ile[x], x});
return;
}
DFS2(K[x][0].nd, S);
if(!ans[K[x][0].nd]) ans[x]=0;
if(!dodaj(S, {ile[x], x})) ans[x]=0;
for(int i=1; i<K[x].size(); ++i) {
set<pair<int,int>>tmp;
DFS2(K[x][i].nd, tmp);
if(!ans[K[x][i].nd]) ans[x]=0;
if(!ans[x]) continue;
for(auto j : tmp) if(!dodaj(S, j)) ans[x]=0;
}
}
vector<int>beechtree(int n, int m, vector<int>P, vector<int>C) {
rep(i, n-1) V[P[i+1]].pb({C[i+1], i+1});
rep(i, n) sort(all(V[i]));
rep(i, n) ans.pb(1);
DFS(0);
set<pair<int,int>>S;
DFS2(0, S);
return ans;
}
Compilation message (stderr)
beechtree.cpp: In function 'void DFS(int)':
beechtree.cpp:22:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
22 | for(int i=1; i<V[x].size(); ++i) if(V[x][i-1].st==V[x][i].st) ans[x]=0;
| ~^~~~~~~~~~~~
beechtree.cpp: In function 'bool zawiera(int, int)':
beechtree.cpp:4:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
4 | #define rep(a, b) for(int a = 0; a < (b); ++a)
| ^
beechtree.cpp:27:3: note: in expansion of macro 'rep'
27 | rep(i, V[a].size()) {
| ^~~
beechtree.cpp:28:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
28 | while(l<V[b].size() && V[b][l].st!=V[a][i].st) ++l;
| ~^~~~~~~~~~~~
beechtree.cpp:29:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
29 | if(l==V[b].size()) return false;
| ~^~~~~~~~~~~~~
beechtree.cpp: In function 'void DFS2(int, std::set<std::pair<int, int> >&)':
beechtree.cpp:56:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
56 | for(int i=1; i<K[x].size(); ++i) {
| ~^~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |