제출 #789955

#제출 시각아이디문제언어결과실행 시간메모리
7899551075508020060209tcCat in a tree (BOI17_catinatree)C++14
51 / 100
1082 ms15392 KiB
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,popcnt,sse4,abm")
#include <bits/stdc++.h>
using namespace std;
int n;int D;
vector<int>e[200005];
int dph[200005];
int tak[200005];
void dfs(int nw,int pa){
dph[nw]=dph[pa]+1;
for(int i=0;i<e[nw].size();i++){
    int v=e[nw][i];
    if(v==pa){continue;}
    dfs(v,nw);
}
}
int dis[200005];
void bfs(vector<int>st){
queue<int>q;
for(int i=1;i<=n;i++){
    dis[i]=1e9;
}
for(int i=0;i<st.size();i++){
    q.push(st[i]);
    dis[st[i]]=0;
}
while(q.size()){
    int nw=q.front();
    q.pop();
    for(int i=0;i<e[nw].size();i++){
        int v=e[nw][i];
        if(dis[v]<=n){continue;}
        dis[v]=dis[nw]+1;
        q.push(v);
    }
}
}

signed main()
{
    cin>>n>>D;
    for(int i=2;i<=n;i++){
        int v;
        cin>>v;
        v++;
        e[v].push_back(i);
        e[i].push_back(v);
    }
    dfs(1,0);
    vector<pair<int,int>>seq;
    for(int i=1;i<=n;i++){
        seq.push_back({dph[i],i});
    }
    sort(seq.begin(),seq.end());
    reverse(seq.begin(),seq.end());
    vector<int>ans;
    ans.push_back(seq[0].second);
    for(int i=1;i<seq.size();i++){
        bfs(ans);
        int nw=seq[i].second;
        if(dis[nw]<D){continue;}else{
            ans.push_back(nw);
        }
    }
    cout<<ans.size();

}


컴파일 시 표준 에러 (stderr) 메시지

catinatree.cpp: In function 'void dfs(int, int)':
catinatree.cpp:11:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 | for(int i=0;i<e[nw].size();i++){
      |             ~^~~~~~~~~~~~~
catinatree.cpp: In function 'void bfs(std::vector<int>)':
catinatree.cpp:23:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 | for(int i=0;i<st.size();i++){
      |             ~^~~~~~~~~~
catinatree.cpp:30:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |     for(int i=0;i<e[nw].size();i++){
      |                 ~^~~~~~~~~~~~~
catinatree.cpp: In function 'int main()':
catinatree.cpp:58:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |     for(int i=1;i<seq.size();i++){
      |                 ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...