Navie 并查集解法!
#include <iostream>
#include <vector>
using namespace std;
int t, n, m, u, v;
int Find(vector<int>& p, int x) {
return p[x] == -1 ? x : p[x] = Find(p, p[x]);
}
void Union(vector<int>& p, int u, int v, int& k) {
if (Find(p, u) == Find(p, v)) return;
p[Find(p, u)] = Find(p, v);
++k;
}
int main(void) {
scanf("%d", &t);
for (int i = 1; i <= t; ++i) {
scanf("%d %d", &n, &m);
vector<int> p(n + 1, -1);
int k = 0;
while (m--) {
scanf("%d %d", &u, &v);
Union(p, u, v, k);
}
printf("Case #%d: %d\n", i, k + ((n - 1 - k) << 1));
}
}
大佬你好,看到你每天都在发题解,我等蒟蒻深深感叹道:tql,同时意识到自己永远无法超越大佬您,
你的题解总是用几个字迷惑了我等蒟蒻,所以能不能讲一下题,不要老这么做?👍🏻