codevs 1365_浴火银河星际跳跃_并查集

发布于 2019-05-04  901 次阅读


题目描述

第一行,三个数,X,N,M
X 表示出现的星系代号的最大值;
N 表示有 N 个星际跳跃门;
M 表示有 M 个任务。
接下来的 N 行描述每个星际跳跃门:每行为两个数字(星系代号),
星际跳跃门连通这两个星系(星际跳跃门是可以双向通行的)

接下来的 M 行表示每个任务需要到达的星系,每个任务需要到达两
个星系。


思路

并查集一下就可以了


#include 
int f[10000];
int find(int x)
{
    if (!f[x]) return x;
    f[x]=find(f[x]);
    return f[x];
}
int insert(int x,int y)
{
    if (find(x)!=find(y))
    {
        f[find(x)]=find(y);
        return 1;
    }
    return 0;
}
int main()
{
    int x,n,m;
    scanf("%d%d%d",&x,&n,&m);
    for (int i=1;i<=n;i++)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        insert(l,r);
    }
    for (int i=1;i<=m;i++)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        if (find(l)==find(r))
            printf("Yes\n");
        else printf("No\n");
    }
}
]]>