题目来源于牛客竞赛:https://ac.nowcoder.com/acm/contest/discuss
题目描述:
输入描述:
输出描述:
示例1:
示例2:
题解:
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, m, x, y;
int f[200020];
unsigned long long s[200020];
unsigned long long z, z1, z2;
int F(int x) {
return f[x] != x ? f[x] = F(f[x]) : x;
}
int main() {
scanf("%d%d", &n, &m);
z = (unsigned long long)n * (n - 1) / 2 * (n - 2) / 3 * (n - 3) / 4;
for (int i = 1; i <= n; i++) {
f[i] = i;
s[i] = 1;
z1 += s[i];
z2 += s[i] * s[i];
}
cout << z << endl;
for (int i = 0; i < m; i++) {
scanf("%d%d", &x, &y);
x = F(x);
y = F(y);
if (x != y) {
z1 -= s[x] + s[y];
z2 -= s[x] * s[x] + s[y] * s[y];
z -= (z1 * z1 - z2) / 2 * s[x] * s[y];
s[y] += s[x];
z1 += s[y];
z2 += s[y] * s[y];
f[x] = y;
}
cout << z << endl;
}
return 0;
}
更多问题,更详细题解可关注牛客竞赛区,一个刷题、比赛、分享的社区。
传送门:https://ac.nowcoder.com/acm/contest/discuss