zoukankan      html  css  js  c++  java
  • VIJOS-P1034 家族

    VIJOS-P1034 家族

    JDOJ传送门

    Description

    若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。

    Input

    第一行:两个整数n,m,(n< =5000,m< =5000),分别表示有n个人,m个亲戚关系。以下m行:每行两个数Mi,Mj,1< =Mi,Mj< =N,表示Ai和Bi具有亲戚关系。接下来一行整数p(p< =5000),询问p对亲戚关系,下面p行:每行两个数Pi,Pj,询问Pi和Pj是否具有亲戚关系。

    Output

    P行,每行一个’Yes’或’No’。表示第i个询问的答案为“具有”或“不具有”亲戚关系。

    Sample Input

    6 5 1 2 1 5 3 4 5 2 1 3 3 1 4 2 3 5 6

    Sample Output

    Yes Yes No


    题解:

    应该算是《亲戚》这道题的双倍经验吧。都是并查集的模板题。

    直接上码子吧:

    #include<bits/stdc++.h>
    using namespace std;
    int fa[100100];
    int find(int x)
    {
        if(fa[x]==x)return x;
        return fa[x]=find(fa[x]);
    }
    void Union(int x,int y)
    {
        int fx,fy;
        fx=find(x);fy=find(y);
        if(fx!=fy)
            fa[fy]=fx;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            fa[i]=i;
        for(int x,y,i=1;i<=m;i++)
        {
            scanf("%d%d",&x,&y);
            Union(x,y);
        }
        int p;
        scanf("%d",&p);
        for(int x,y,i=1;i<=p;i++)
        {
            scanf("%d%d",&x,&y);
            int fx=find(x),fy=find(y);
            if(fx==fy)printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    POJ 1251 Jungle Roads
    1111 Online Map (30 分)
    1122 Hamiltonian Cycle (25 分)
    POJ 2560 Freckles
    1087 All Roads Lead to Rome (30 分)
    1072 Gas Station (30 分)
    1018 Public Bike Management (30 分)
    1030 Travel Plan (30 分)
    22. bootstrap组件#巨幕和旋转图标
    3. Spring配置文件
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13710057.html
Copyright © 2011-2022 走看看