A了一个点 求调
查看原帖
A了一个点 求调
255540
Her_Lingxiao楼主2022/9/8 08:16
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e5;
int A[N];
void Init(int n)
{
    for(int x = 1; x <= n; x++)
        A[x] = x;
    return;
}
int Root(int p)
{
    if(A[p] <= p) //当找不到能到达的更大的节点时跳出递归
        return p;
    else
        return A[p] = Root(A[p]); 
}

int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    Init(n);
    for(int i = 0; i < m; i++)
    {
        int tar, start;
        scanf("%d %d", &start, &tar);
        A[start] = Root(A[tar]) > A[start] ? Root(A[tar]) : A[start];
    }
    for(int i = 1; i <= n; i++)
        printf("%d ", Root(i));
    getchar();getchar();
    return 0;
}
2022/9/8 08:16
加载中...