結果
問題 |
No.2325 Skill Tree
|
ユーザー |
|
提出日時 | 2025-09-11 09:35:06 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 757 ms / 3,000 ms |
コード長 | 1,515 bytes |
コンパイル時間 | 3,452 ms |
コンパイル使用メモリ | 303,680 KB |
実行使用メモリ | 27,964 KB |
最終ジャッジ日時 | 2025-09-11 09:35:38 |
合計ジャッジ時間 | 27,317 ms |
ジャッジサーバーID (参考情報) |
judge / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 36 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for (int i = 0; i< (n); ++i) #define repi(i, a, b) for (int i = (a); i < (b); ++i) #define all(x) (x).begin(), (x).end() #define fore(i, a) for(auto &i:a) using ll = long long; int main() { int n; cin >> n; vector<int> lv(n, -1); vector<pair<int,int>> p; map<int,int> M; vector<vector<pair<int,int>>> G(n); rep(i, n-1){ int l, a; cin >> l >> a; a--; G[a].push_back({l, i+1}); p.push_back({l, 0}); } int q; cin >> q; vector<pair<int,int>> qs(q); rep(i, q){ int t, x; cin >> t >> x; if(t == 2)x--; else{ p.push_back({x, 1}); } qs[i] = {t, x}; } vector<bool> seen(n, false); seen[0] = true; priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq; fore(to, G[0]){ pq.push(to); } int kind = 1; sort(all(p)); fore(pp, p){ if(pp.second == 1){ M[pp.first] = kind; continue; } int nlv = pp.first; while(!pq.empty() && pq.top().first <= nlv){ auto[_, nxt] = pq.top(); pq.pop(); if(seen[nxt])continue; seen[nxt] = true; lv[nxt] = nlv; kind++; fore(e, G[nxt]){ pq.push(e); } } } vector<int> cp = lv; const int INF = 1073741823; rep(i, n)if(i != 0 && lv[i] == -1)cp[i] = INF; sort(all(cp)); rep(i, q){ auto[t, x] = qs[i]; if(t == 1){ cout << upper_bound(all(cp), x)-cp.begin() << endl; } else{ cout << lv[x] << endl; } } }