Submission #27546289
Source Code Expand
#include <iostream>
#include <vector>
using namespace std;
// {{{ UnionFind, DisjointSet
template<int MaxN>
class UnionFind {
// if par[x] < 0: x is a parent and -par[x] is the size of the set
// if par[x] >= 0: x's parent is par[x]
int par[MaxN];
public:
UnionFind() {
for (int i = 0; i < MaxN; i++) {
par[i] = -1;
}
}
int root(int x) {
if (par[x] < 0) {
return x;
} else {
return par[x] = root(par[x]);
}
}
bool same(int x, int y) {
return root(x) == root(y);
}
int size(int x) {
return -par[root(x)];
}
bool unite(int x, int y) {
x = root(x);
y = root(y);
if (x == y) { return false; }
if (par[x] > par[y]) {
std::swap(x, y);
}
par[x] += par[y];
par[y] = x;
return true;
}
};
void UnionFindSample() {
printf("============ UnionFindSample ============\n");
UnionFind<100> u;
for (int i = 0; i < 34; i++) {
u.unite(i, i*3);
}
for (int i = 0; i < 100; i++) {
printf("root(%d) = %d\n", i, u.root(i));
}
}
// }}} UnionFind, DisjointSet
int N, M;
int A[200005], B[200005];
vector<int> E[200005];
int main() {
cin >> N >> M;
for (int i = 0; i < M; i++) {
cin >> A[i] >> B[i];
A[i]--; B[i]--;
E[min(A[i], B[i])].push_back(max(A[i], B[i]));
}
int k = 0;
vector<int> v;
UnionFind<200005> u;
for (int i = N-1; i >= 0; i--) {
v.push_back(k);
k++;
// printf("i = %d: ", i);
for (int j = 0; j < E[i].size(); j++) {
int n = E[i][j];
// printf("%d, ", n);
int oi = u.root(i), on = u.root(n);
if (n > i) {
u.unite(i, n);
}
if (u.root(i) != oi || u.root(n) != on) {
k--;
}
}
// printf(" ## ");
// for (int j = 0; j < N; j++) { printf("%d -> %d, ", j, u.root(j)); } puts("");
}
for (int i = 0; i < v.size(); i++) {
cout << v[v.size()-1-i] << endl;
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - Graph Destruction |
| User | daimatz |
| Language | C++ (GCC 9.2.1) |
| Score | 500 |
| Code Size | 1983 Byte |
| Status | AC |
| Exec Time | 405 ms |
| Memory | 17320 KiB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:73:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
73 | for (int j = 0; j < E[i].size(); j++) {
| ~~^~~~~~~~~~~~~
./Main.cpp:87:21: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
87 | for (int i = 0; i < v.size(); i++) {
| ~~^~~~~~~~~~
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 500 / 500 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example0.txt, example1.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, example0.txt, example1.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 000.txt | AC | 14 ms | 9036 KiB |
| 001.txt | AC | 9 ms | 9044 KiB |
| 002.txt | AC | 10 ms | 8940 KiB |
| 003.txt | AC | 9 ms | 8988 KiB |
| 004.txt | AC | 8 ms | 8928 KiB |
| 005.txt | AC | 10 ms | 8928 KiB |
| 006.txt | AC | 287 ms | 9592 KiB |
| 007.txt | AC | 286 ms | 9708 KiB |
| 008.txt | AC | 284 ms | 9660 KiB |
| 009.txt | AC | 27 ms | 9016 KiB |
| 010.txt | AC | 27 ms | 9124 KiB |
| 011.txt | AC | 35 ms | 9652 KiB |
| 012.txt | AC | 39 ms | 9636 KiB |
| 013.txt | AC | 96 ms | 12092 KiB |
| 014.txt | AC | 94 ms | 12032 KiB |
| 015.txt | AC | 287 ms | 9784 KiB |
| 016.txt | AC | 287 ms | 9668 KiB |
| 017.txt | AC | 302 ms | 10740 KiB |
| 018.txt | AC | 302 ms | 10848 KiB |
| 019.txt | AC | 404 ms | 14668 KiB |
| 020.txt | AC | 405 ms | 14820 KiB |
| 021.txt | AC | 37 ms | 9900 KiB |
| 022.txt | AC | 69 ms | 11608 KiB |
| 023.txt | AC | 78 ms | 11808 KiB |
| 024.txt | AC | 80 ms | 12028 KiB |
| 025.txt | AC | 352 ms | 12468 KiB |
| 026.txt | AC | 353 ms | 12528 KiB |
| 027.txt | AC | 374 ms | 16112 KiB |
| 028.txt | AC | 380 ms | 17320 KiB |
| 029.txt | AC | 13 ms | 8980 KiB |
| 030.txt | AC | 12 ms | 8964 KiB |
| 031.txt | AC | 20 ms | 8896 KiB |
| 032.txt | AC | 402 ms | 14496 KiB |
| 033.txt | AC | 396 ms | 14404 KiB |
| 034.txt | AC | 401 ms | 14564 KiB |
| example0.txt | AC | 10 ms | 8996 KiB |
| example1.txt | AC | 11 ms | 8916 KiB |