제출 #440720

#제출 시각아이디문제언어결과실행 시간메모리
440720fadi57Ball Machine (BOI13_ballmachine)C++14
100 / 100
578 ms35064 KiB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
const int mx=1e5+5;
typedef long long ll;
const int mod=1e9+7;
int inf=1e9+10;
int n,l,r,q;
set<pair<int,int>>nxt;

int t=1;
int timm[mx];
int m[mx];
int mn[mx];
const int mxx=22;
vector<int>adj[mx];
int dp[mx][22];
void calcmin(int node){
 mn[node]=node;

    for(auto it:adj[node]){

        calcmin(it);
        mn[node]=min(mn[node],mn[it]);
    }
}

void dfs(int node){


     vector<pair<int,int>>ord;
     for(auto it:adj[node]){


        ord.push_back({mn[it],it});

     }
   sort(ord.begin(),ord.end());

   for(auto it:ord){

    dfs(it.second);
   }
  timm[node]=t;
  m[t]=node;
  nxt.insert({t,node});
  t++;
 }



 void dfs2(int node,int par){

 dp[node][0]=par;

 for(int i=1;i<mxx;i++){

    dp[node][i]=dp[dp[node][i-1]][i-1];
 }



 for(auto it:adj[node]){
    dfs2(it,node);
 }
 return;
 }
 int ball[mx];
 int main(){
     cin>>n>>q;
     for(int i=1;i<=n;i++){

        int x;
        cin>>x;
        if(x==0){r=i;}else{

            adj[x].push_back(i);


        }
     }
     calcmin(r);
     dfs(r);
     dfs2(r,0);

      for(int i=0;i<q;i++){
        int t;cin>>t;

        if(t==1){

            int k;
            cin>>k;
            int me;
            while(k--){
               auto me=*nxt.begin();
               nxt.erase(me);
               ball[me.second]=1;

               if(k==0){
                cout<<me.second;
               }
               // cout<<k<<" ";
            }
        }else{

        int v;cin>>v;
        int d=0;
        for(int i=mxx-1;i>=0;i--){
            if(!ball[dp[v][i]]){continue;
            }else{
                v=dp[v][i];
                d+=(1<<i);


            }


        }
        ball[v]=0;
        nxt.insert({timm[v],v});
        cout<<d;


           }


        cout<<"\n";

      }

 }

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

ballmachine.cpp: In function 'int main()':
ballmachine.cpp:94:17: warning: unused variable 'me' [-Wunused-variable]
   94 |             int me;
      |                 ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...