Submission #1108219

#TimeUsernameProblemLanguageResultExecution timeMemory
11082190pt1mus23Cat in a tree (BOI17_catinatree)C++14
100 / 100
120 ms99912 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define ins insert      
#define pb push_back
#define endl '\n'
#define putr(x) cout<<x<<endl;return; 
#define all(x) x.begin(),x.end()
const int mod = 1e9 +7, sze = 2e5 +10, inf = INT_MAX, LL = 30;

int n,k;
int val[sze];
vector<int> graph[sze];
deque<int> dfs(int node,int par=-1){
    deque<int> res;
    res.pb(1);
    for(auto v:graph[node]){
        if(v!=par){
            auto nxt = dfs(v,node);
            nxt.push_front(0);
            if(nxt.size()>res.size()){
                swap(nxt,res);
            }
            for(int j=0;j<nxt.size();j++){
                int y = max(j,k-j);
                int a = nxt[j] + (y<res.size() ?  res[y] : 0);
                int b = res[j] + (y<nxt.size() ? nxt[y] : 0) ;
                res[j]=max({res[j],a,b});
            }
            for(int j = nxt.size()-1;j>=0;j--){
                if(j+1<res.size()){
                    res[j]=max(res[j],res[j+1]);
                }
            }
        }
    }
    return res;
}
void rush(){
    cin>>n>>k;
    for(int i=2;i<=n;i++){
        int u;cin>>u;
        int v=i;
        ++u;
        graph[u].pb(v);
        graph[v].pb(u);
    }
    deque<int> res = dfs(1,0);
    cout<<res[0]<<endl;
}
 
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
 
    int tt = 1; 
    // cin>>tt;
 
    while(tt--){
        rush();
    }
 
    return 0;
}

Compilation message (stderr)

catinatree.cpp: In function 'std::deque<long long int> dfs(long long int, long long int)':
catinatree.cpp:24:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::deque<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |             for(int j=0;j<nxt.size();j++){
      |                         ~^~~~~~~~~~~
catinatree.cpp:26:36: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::deque<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |                 int a = nxt[j] + (y<res.size() ?  res[y] : 0);
      |                                   ~^~~~~~~~~~~
catinatree.cpp:27:36: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::deque<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |                 int b = res[j] + (y<nxt.size() ? nxt[y] : 0) ;
      |                                   ~^~~~~~~~~~~
catinatree.cpp:31:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::deque<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |                 if(j+1<res.size()){
      |                    ~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...