Submission #5119798
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
class UnionFind {
private:
vector<long long> par;
public:
UnionFind(int N) { par = vector<long long>(N, -1LL); }
int find(int x);
long long size(int x);
void unite(int x, int y);
bool same(int x, int y);
};
//----UnionFind-------------------------------
int UnionFind::find(int x) {
if (par[x] < 0) return x;
else return par[x] = find(par[x]);
}
long long UnionFind::size(int x) {
return -par[find(x)];
}
void UnionFind::unite(int x, int y) {
//既に同じ集合に属しているならば繋げない
if (same(x,y)) return;
x = find(x);
y = find(y);
//大きい方に小さい方をくっ付ける
if (size(x) < size(y)) swap(x, y);
par[x] += par[y];
par[y] = x;
}
bool UnionFind::same(int x, int y) {
x = find(x);
y = find(y);
return x == y;
}
int main() {
long long n,m;
cin >> n >> m;
long long ans[m+1];
long long A[m],B[m];
UnionFind uf(n);
for (int i = 0;i < m;i++) {
cin >> A[i] >> B[i];
}
ans[m] = n * (n - 1) / 2;
for (int i = m - 1;i >= 0;i--) {
if (!uf.same(A[i]-1,B[i]-1)) {
ans[i] = ans[i+1] - uf.size(A[i]-1) * uf.size(B[i]-1);
} else {
ans[i] = ans[i+1];
}
uf.unite(A[i]-1,B[i]-1);
}
for(int i = 1;i < m + 1;i++) {
cout << ans[i] << endl;
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | D - Decayed Bridges |
| User | harady |
| Language | C++14 (GCC 5.4.1) |
| Score | 400 |
| Code Size | 1331 Byte |
| Status | AC |
| Exec Time | 219 ms |
| Memory | 4480 KiB |
Judge Result
| Set Name | All | Sample | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 400 / 400 | 0 / 0 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| All | sample_01, sample_02, sample_03, testcase_01, testcase_02, testcase_03, testcase_04, testcase_05, testcase_06, testcase_07, testcase_08, testcase_09, testcase_10, testcase_11, testcase_12, testcase_13, testcase_14, testcase_15, testcase_16, testcase_17, testcase_18, testcase_19, testcase_20, testcase_21, testcase_22, testcase_23 |
| Sample | sample_01, sample_02, sample_03 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| sample_01 | AC | 1 ms | 256 KiB |
| sample_02 | AC | 1 ms | 256 KiB |
| sample_03 | AC | 1 ms | 256 KiB |
| testcase_01 | AC | 1 ms | 256 KiB |
| testcase_02 | AC | 167 ms | 3328 KiB |
| testcase_03 | AC | 207 ms | 4096 KiB |
| testcase_04 | AC | 211 ms | 4480 KiB |
| testcase_05 | AC | 211 ms | 4480 KiB |
| testcase_06 | AC | 1 ms | 256 KiB |
| testcase_07 | AC | 197 ms | 4096 KiB |
| testcase_08 | AC | 127 ms | 2688 KiB |
| testcase_09 | AC | 1 ms | 256 KiB |
| testcase_10 | AC | 214 ms | 4480 KiB |
| testcase_11 | AC | 41 ms | 1024 KiB |
| testcase_12 | AC | 1 ms | 256 KiB |
| testcase_13 | AC | 213 ms | 4480 KiB |
| testcase_14 | AC | 219 ms | 4480 KiB |
| testcase_15 | AC | 176 ms | 3712 KiB |
| testcase_16 | AC | 90 ms | 1920 KiB |
| testcase_17 | AC | 199 ms | 4096 KiB |
| testcase_18 | AC | 195 ms | 2944 KiB |
| testcase_19 | AC | 194 ms | 2816 KiB |
| testcase_20 | AC | 195 ms | 2944 KiB |
| testcase_21 | AC | 1 ms | 256 KiB |
| testcase_22 | AC | 25 ms | 640 KiB |
| testcase_23 | AC | 51 ms | 1152 KiB |