100分:
#include <iostream>
using namespace std;
const int N = 2e6 + 5;
int p[N], n, m, k, a, b, pa, pb;
int find(int x)
{
if (p[x] != x)
p[x] = find(p[x]);
return p[x];
}
struct node
{
int l, r;
} e[N];
signed main()
{
ios::sync_with_stdio(false), cin.tie(0);
cin >> n >> m >> k;
for (int i = 1; i <= n; i++)
p[i] = i;
int res = 0;
for (int i = 1; i <= m; i++)
{
cin >> e[i].l >> e[i].r, a = e[i].l, b = e[i].r;
if (a > k && b > k)
p[find(a)] = find(b);
}
for (int i = 1; i <= m; i++)
{
pa = find(e[i].l), pb = find(e[i].r);
if (e[i].l <= k || e[i].r <= k)
if (pa == pb)
res++;
else
p[pa] = pb;
}
cout << res << endl;
}
60分:
while (m--)
{
cin >> a >> b, pa = find(a), pb = find(b);
if (pa == pb)
if (a <= k || b <= k)
res++;
else
continue;
p[pa] = pb;
}
感觉下面的代码是上面代码两种循环的合并处理啊...