이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 200'000;
vector<pair<int, int>> grafo[MAXN], opz[MAXN];
int m, col[MAXN], p[MAXN];
bool ok[MAXN];
vector<map<int,int>> freq[MAXN];
int num[MAXN];
bool comp(map<int,int> x,map<int,int> y){
return x.size()>y.size();
}
void dfs(int nodo){
vector<int> tmp;
ok[nodo]=true;
freq[nodo].push_back(map<int,int>());
for(auto [to,c] : grafo[nodo]){
dfs(to);
ok[nodo]&=ok[to];
for(auto x : freq[to])
freq[nodo].push_back(x);
freq[nodo][0][c]++;
tmp.push_back(c);
}
if(!ok[nodo])return;
sort(freq[nodo].begin()+1,freq[nodo].end(),comp);
sort(tmp.begin(),tmp.end());
for(int i=1;i<tmp.size();i++){
if(tmp[i]==tmp[i-1])ok[nodo]=false;
}
for(int i=1;i<freq[nodo].size();i++){
for(auto [x,y] : freq[nodo][i]){
if(y>freq[nodo][i-1][x])ok[nodo]=false;
}
}
}
vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) {
m = M;
for (int i = 1; i <= N - 1; i++) {
grafo[P[i]].emplace_back(i, C[i]);
p[i] = P[i];
}
dfs(0);
vector<int> ans;
for (int i = 0; i < N; i++) {
ans.push_back(ok[i]);
}
return ans;
}
/*
int main() {
int N, M;
assert(2 == scanf("%d %d", &N, &M));
std::vector<int> P(N);
for (int i = 0; i < N; ++i)
assert(1 == scanf("%d", &P[i]));
std::vector<int> C(N);
for (int i = 0; i < N; ++i)
assert(1 == scanf("%d", &C[i]));
fclose(stdin);
std::vector<int> res = beechtree(N, M, P, C);
int n = res.size();
for (int i = 0; i < n; ++i) {
if (i > 0)
printf(" ");
printf("%d", res[i]);
}
printf("\n");
fclose(stdout);
return 0;
}
*/
컴파일 시 표준 에러 (stderr) 메시지
beechtree.cpp: In function 'void dfs(int)':
beechtree.cpp:40:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
40 | for(int i=1;i<tmp.size();i++){
| ~^~~~~~~~~~~
beechtree.cpp:44:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::map<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
44 | for(int i=1;i<freq[nodo].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... |