結果
| 問題 | No.96 圏外です。 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-09-20 05:57:58 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,759 bytes |
| 記録 | |
| コンパイル時間 | 695 ms |
| コンパイル使用メモリ | 84,548 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-19 08:17:18 |
| 合計ジャッジ時間 | 2,895 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 26 RE * 2 |
ソースコード
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <numeric>
#include <functional>
#include <cmath>
#include <queue>
#include <stack>
#define repd(i,a,b) for (int i=(a);i<(b);i++)
#define rep(i,n) repd(i,0,n)
typedef long long ll;
using namespace std;
int inputValue(){
int a;
cin >> a;
return a;
};
void inputArray(int * p, int a){
rep(i, a){
cin >> p[i];
}
};
void inputVector(vector<int> * p, int a){
rep(i, a){
int input;
cin >> input;
p -> push_back(input);
}
}
template <typename T>
void output(T a, int precision) {
if(precision > 0){
cout << setprecision(precision) << a << "\n";
}
else{
cout << a << "\n";
}
}
struct union_find {
};
vector<int> parent, rnk;
int root(int x){
if (parent[x] == x) {
return x;
}
else{
return root(parent[x]);
}
}
void unite(int x, int y){
x = root(x);
y = root(y);
if (x == y) {
return;
}
if (rnk[x] < rnk[y]) {
parent[x] = y;
}
else{
parent[y] = x;
if (rnk[x] == rnk[y]) {
rnk[x]++;
}
}
}
bool same(int x, int y){
return root(x) == root(y);
}
int main(int argc, const char * argv[]) {
// Union Find
int N = inputValue();
parent.resize(N);
rnk.resize(N);
int Q = inputValue();
rep(i, N){
parent[i] = i;
rnk[i] = 0;
}
rep(i, Q) {
int P = inputValue();
int A = inputValue();
int B = inputValue();
if (P == 0) {
unite(A, B);
}
if (P == 1) {
output(same(A, B) ? "Yes" : "No", 0);
}
}
return 0;
}