Submission #129643

#TimeUsernameProblemLanguageResultExecution timeMemory
129643VardanyanCat in a tree (BOI17_catinatree)C++14
51 / 100
1071 ms14444 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2*1000*100+5; vector<int> g[N]; int mark[N]; int depth[N]; int par[N]; void dfs(int v,int p = -1){ if(p!=-1) depth[v] = depth[p]+1; par[v] = p; for(int i = 0;i<g[v].size();i++){ int to = g[v][i]; if(to == p) continue; dfs(to,v); } } bool cmp(int a,int b){ return depth[a]>depth[b]; } bool col[N]; int d; int mr = 0; int nw; void go(int v,int dd = 0,int p = -1){ if(dd>=d) return; mark[v] = 1; mr++; for(int i = 0;i<g[v].size();i++){ int to = g[v][i]; if(to == p || to == nw) continue; go(to,dd+1,v); } } int main(){ ios_base::sync_with_stdio(false); int n; cin>>n>>d; for(int i = 1;i<=n-1;i++){ int x; cin>>x; g[i].push_back(x); g[x].push_back(i); } dfs(0); vector<int> v; for(int i = 0;i<n;i++) v.push_back(i); sort(v.begin(),v.end(),cmp); int ans = 0; int num = 1; for(int jj = 0;jj<n;jj++){ int i = v[jj]; if(mark[i]) continue; mark[i] = 1; ans++; nw = i; go(par[i],1); // if(mr == n) break; /*queue<pair<int,int> > q; q.push({i,0}); num++; col[i] = num; while(!q.empty()){ pair<int,int> x = q.front(); int gag = x.first; int dd = x.second; q.pop(); if(dd>=d) continue; mark[gag] = 1; for(int j = 0;j<g[gag].size();j++){ int to = g[gag][j]; if(col[to]!=num){ q.push({to,dd+1}); col[to] = num; } } }*/ // for(int i = 0;i<n;i++) cout<<mark[i]<<" "; // cout<<endl; } cout<<max(1,ans)<<endl; return 0; }

Compilation message (stderr)

catinatree.cpp: In function 'void dfs(int, int)':
catinatree.cpp:11:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0;i<g[v].size();i++){
                   ~^~~~~~~~~~~~
catinatree.cpp: In function 'void go(int, int, int)':
catinatree.cpp:29:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0;i<g[v].size();i++){
                   ~^~~~~~~~~~~~
catinatree.cpp: In function 'int main()':
catinatree.cpp:50:9: warning: unused variable 'num' [-Wunused-variable]
     int num = 1;
         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...