結果

問題 No.2325 Skill Tree
ユーザー 小高悠太郎
提出日時 2025-09-11 09:24:17
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,440 bytes
コンパイル時間 8,991 ms
コンパイル使用メモリ 284,532 KB
実行使用メモリ 28,624 KB
最終ジャッジ日時 2025-09-11 09:24:48
合計ジャッジ時間 31,175 ms
ジャッジサーバーID
(参考情報)
judge2 / judge
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 2
other AC * 8 WA * 28
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
	sort(all(cp));

	rep(i, q){
		auto[t, x] = qs[i];
		if(t == 1){
			cout << upper_bound(all(cp), x)-cp.begin() + 1 << endl;
		}
		else{
			cout << lv[x] << endl;
		}
	}


			




		


}
0