結果
| 問題 |
No.2202 贅沢てりたまチキン
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-10-26 00:14:18 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 147 ms / 2,000 ms |
| コード長 | 1,429 bytes |
| コンパイル時間 | 2,184 ms |
| コンパイル使用メモリ | 173,280 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-25 08:14:43 |
| 合計ジャッジ時間 | 6,100 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 28 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i,m,n) for(int i=m; i<n; ++i)
#define repl(i,m,n) for(ll i=m; i<n; ++i)
struct UnionFind{
vector<int> size, parent;
UnionFind(){}
UnionFind(int n){
size.resize(n,0);
parent.resize(n,0);
for(int i=0; i<n; ++i){
make_tree(i);
}
}
void make_tree(int x){
parent[x] = x;
size[x] = 1;
}
bool is_same(int x, int y){
return find_root(x) == find_root(y);
}
bool unite(int x, int y){
x = find_root(x);
y = find_root(y);
if(x == y) return false;
if(size[x] > size[y]){
parent[y] = x;
size[x] += size[y];
}else{
parent[x] = y;
size[y] += size[x];
}
return true;
}
int find_root(int x){
if(x != parent[x]) parent[x] = find_root(parent[x]);
return parent[x];
}
int tree_size(int x){
return size[find_root(x)];
}
};
int main(){
int N, L;
cin >> N >> L;
UnionFind uf(2*N);
rep(i, 0, L){
int A, B;
cin >> A >> B;
A--, B--;
uf.unite(A, B+N);
uf.unite(A+N, B);
}
bool f = true;
rep(i, 0, N){
if(!uf.is_same(i, i+N)){
f = false;
break;
}
}
cout << (f ? "Yes" : "No") << endl;
return 0;
}