제출 #1125519

#제출 시각아이디문제언어결과실행 시간메모리
1125519AgageldiBall Machine (BOI13_ballmachine)C++20
25 / 100
1100 ms104852 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define N 4000005 #define ff first #define ss second #define pb push_back #define sz(s) (int)s.size() #define rep(c, a, b) for(c = a; c <= b; c++) int n, t, q, m, vis[N], par[N], r, dis[N]; vector <int> v[N]; deque <int> ans; void solve(int x,int p) { int mn = 0; for(auto i : v[x]) { if(vis[i] == 0 && dis[mn] > dis[i]) mn = i; } if(!mn) { vis[x] = 1; if(!p)cout << x << '\n'; return; } solve(mn, p); return; } void find(int x,int cnt) { if(vis[par[x]] == 0 || par[x] == x) { vis[x] = 0; cout << cnt << '\n'; return; } find(par[x], cnt + 1); } void dfs(int x) { for(auto i:v[x]) { dfs(i); dis[x] = min(dis[x],dis[i]); } dis[x] = min(x,dis[x]); } int main () { ios::sync_with_stdio(0);cin.tie(0); cin >> n >> q; for(int i = 0;i<=n;i++) { dis[i] = INT_MAX; } for(int i = 1; i <= n; i++) { int x; cin >> x; if(x) { v[x].pb(i); par[i] = x; } else r = i; } dfs(r); par[r] = r; for(int i = 1; i <= q; i++) { int x; cin >> t >> x; if(t == 1) { while(x--) { solve(r, x); } continue; } find(x,0); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...