这两种写法一个60一个100,但是没看出来区别?
查看原帖
这两种写法一个60一个100,但是没看出来区别?
833124
BIOS楼主2023/8/8 18:11

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;
    }

感觉下面的代码是上面代码两种循环的合并处理啊...

2023/8/8 18:11
加载中...