Submission #41971496
Source Code Expand
import std;
void read(T...)(string S, ref T args) {
auto buf = S.split;
foreach (i, ref arg; args) {
arg = buf[i].to!(typeof(arg));
}
}
void read_array(T)(string S, ref T[] arg) {
arg = S.split.to!(T[]);
}
struct pair {
int x;
int y;
}
void main () {
int N, M; read(readln, N, M);
auto UF = UnionFind!int();
foreach (_; 0..M) {
int u, v; read(readln, u, v);
UF.merge_group(u, v);
}
bool[pair] dont_merge;
int K; read(readln, K);
foreach (_; 0..K) {
int x, y; read(readln, x, y);
dont_merge[pair(UF.root(x), UF.root(y))] = true;
dont_merge[pair(UF.root(y), UF.root(x))] = true;
}
int Q; read(readln, Q);
foreach (_; 0..Q) {
int p, q; read(readln, p, q);
if (pair(UF.root(p), UF.root(q)) in dont_merge || pair(UF.root(q), UF.root(p)) in dont_merge) {
writeln("No");
} else {
writeln("Yes");
}
}
}
struct UnionFind(T) {
T[T] parent;
int[T] size;
// どの要素が一番上の親かを返す。途中経由した頂点もparentの内容がすべて更新される。
// privateを外しても問題ないが、同一グループ判定にはis_same_group()を使うべき
T root (T x) {
if (x !in parent) {
return x;
}
if (parent[x] != x) {
parent[x] = root(parent[x]);
}
return parent[x];
}
// 素集合の数を返す。
int num_of_group () {
int ret = 0;
foreach (key, elem; parent) {
if (key == elem) {
ret++;
}
}
return ret;
}
// 素集合系に要素を(要素数1の集合として)登録する。
// これをしないと孤立した頂点は系に存在しないものとして扱われ、num_of_group()が正常に動かない。
// 他の関数は影響を受けない。
bool register (T x) {
if (x !in parent) {
parent[x] = x;
size[x] = 1;
}
return false;
}
// 2つの要素が同一集合に属しているかを判定する。
bool is_same_group (T x, T y) {
if (x == y) {
return true;
}
if (x !in parent || y !in parent) {
return false;
}
T parx = root(x), pary = root(y);
return parx == pary;
}
// それぞれの要素が属する集合を併合する。
bool merge_group (T x, T y) {
if (x == y) {
return false;
}
if (x !in parent) {
parent[x] = x;
size[x] = 1;
}
if (y !in parent) {
parent[y] = y;
size[y] = 1;
}
T parx = root(x), pary = root(y);
if (size[parx] > size[pary]) {
size[parx] += size[pary];
parent[pary] = parx;
} else {
size[pary] += size[parx];
parent[parx] = pary;
}
return true;
}
// 要素が属する集合の要素数を返す。
int sizeof_group (T x) {
if (x !in parent) {
return 1;
}
return size[root(x)];
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - Good Graph |
| User | InTheBloom |
| Language | D (DMD 2.091.0) |
| Score | 475 |
| Code Size | 3355 Byte |
| Status | AC |
| Exec Time | 1155 ms |
| Memory | 75124 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 475 / 475 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example0.txt |
| All | 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, 044.txt, 045.txt, 046.txt, 047.txt, 048.txt, 049.txt, 050.txt, 051.txt, 052.txt, 053.txt, 054.txt, 055.txt, 056.txt, 057.txt, 058.txt, 059.txt, 060.txt, example0.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 000.txt | AC | 416 ms | 36712 KiB |
| 001.txt | AC | 880 ms | 43912 KiB |
| 002.txt | AC | 957 ms | 74984 KiB |
| 003.txt | AC | 122 ms | 4464 KiB |
| 004.txt | AC | 399 ms | 36644 KiB |
| 005.txt | AC | 638 ms | 54744 KiB |
| 006.txt | AC | 660 ms | 24464 KiB |
| 007.txt | AC | 588 ms | 33768 KiB |
| 008.txt | AC | 853 ms | 46696 KiB |
| 009.txt | AC | 427 ms | 45324 KiB |
| 010.txt | AC | 615 ms | 44112 KiB |
| 011.txt | AC | 731 ms | 44224 KiB |
| 012.txt | AC | 872 ms | 44160 KiB |
| 013.txt | AC | 613 ms | 44112 KiB |
| 014.txt | AC | 843 ms | 44024 KiB |
| 015.txt | AC | 904 ms | 44200 KiB |
| 016.txt | AC | 616 ms | 44204 KiB |
| 017.txt | AC | 617 ms | 44084 KiB |
| 018.txt | AC | 882 ms | 44900 KiB |
| 019.txt | AC | 594 ms | 44008 KiB |
| 020.txt | AC | 851 ms | 44180 KiB |
| 021.txt | AC | 897 ms | 44180 KiB |
| 022.txt | AC | 603 ms | 44268 KiB |
| 023.txt | AC | 768 ms | 44192 KiB |
| 024.txt | AC | 872 ms | 44016 KiB |
| 025.txt | AC | 617 ms | 43996 KiB |
| 026.txt | AC | 617 ms | 44160 KiB |
| 027.txt | AC | 873 ms | 44232 KiB |
| 028.txt | AC | 643 ms | 44200 KiB |
| 029.txt | AC | 854 ms | 44716 KiB |
| 030.txt | AC | 913 ms | 44668 KiB |
| 031.txt | AC | 633 ms | 44188 KiB |
| 032.txt | AC | 755 ms | 46740 KiB |
| 033.txt | AC | 944 ms | 46844 KiB |
| 034.txt | AC | 652 ms | 44120 KiB |
| 035.txt | AC | 685 ms | 46880 KiB |
| 036.txt | AC | 1047 ms | 54896 KiB |
| 037.txt | AC | 642 ms | 43988 KiB |
| 038.txt | AC | 925 ms | 54932 KiB |
| 039.txt | AC | 1077 ms | 75008 KiB |
| 040.txt | AC | 714 ms | 44116 KiB |
| 041.txt | AC | 1060 ms | 75012 KiB |
| 042.txt | AC | 1126 ms | 75068 KiB |
| 043.txt | AC | 722 ms | 44020 KiB |
| 044.txt | AC | 995 ms | 74952 KiB |
| 045.txt | AC | 1070 ms | 74980 KiB |
| 046.txt | AC | 651 ms | 44084 KiB |
| 047.txt | AC | 934 ms | 74960 KiB |
| 048.txt | AC | 1088 ms | 75124 KiB |
| 049.txt | AC | 640 ms | 44068 KiB |
| 050.txt | AC | 751 ms | 46808 KiB |
| 051.txt | AC | 1047 ms | 75064 KiB |
| 052.txt | AC | 659 ms | 44204 KiB |
| 053.txt | AC | 742 ms | 43992 KiB |
| 054.txt | AC | 1155 ms | 75112 KiB |
| 055.txt | AC | 654 ms | 44180 KiB |
| 056.txt | AC | 990 ms | 74992 KiB |
| 057.txt | AC | 1001 ms | 74984 KiB |
| 058.txt | AC | 611 ms | 44108 KiB |
| 059.txt | AC | 849 ms | 55032 KiB |
| 060.txt | AC | 920 ms | 74900 KiB |
| example0.txt | AC | 2 ms | 3460 KiB |