結果
| 問題 |
No.1054 Union add query
|
| コンテスト | |
| ユーザー |
milanis48663220
|
| 提出日時 | 2020-06-20 01:42:09 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,201 bytes |
| コンパイル時間 | 789 ms |
| コンパイル使用メモリ | 83,004 KB |
| 実行使用メモリ | 13,880 KB |
| 最終ジャッジ日時 | 2024-07-03 16:30:12 |
| 合計ジャッジ時間 | 9,172 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 3 TLE * 1 -- * 4 |
ソースコード
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
int N, Q;
int par[500000];
int sz[500000];
int dat[500000];
int cnt;
int root(int v){
cnt++;
return par[v] == v ? v : root(par[v]);
}
int calc(int v){
int ans = dat[v];
while(v != par[v]){
v = par[v]; ans += dat[v];
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout << setprecision(10) << fixed;
cin >> N >> Q;
for(int i = 0; i < N; i++){
par[i] = i;
sz[i] = 1;
}
for(int i = 0; i < Q; i++){
cnt = 0;
int t, a, b;
cin >> t >> a >> b;
if(t == 1){
a--; b--;
int ra = root(a), rb = root(b);
if(ra != rb){
if(sz[ra] > sz[rb]) swap(ra, rb);
par[ra] = rb;
dat[ra] -= dat[rb];
sz[rb] += sz[rb];
}
}else if(t == 2) {
a--;
int r = root(a);
dat[r] += b;
}else{
a--;
cout << calc(a) << endl;
}
}
}
milanis48663220