• zjut1689联盟


    http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1689

    联盟 
    Time Limit:1000MS  Memory Limit:32768K
    Description:
    
    某大陆上有n个独立的国家,它们没有组成任何联盟。但从某一天开始,1号国家将某国拉拢过去作为联盟,然后2号国家也拉拢某国,然后3号。。。。一直到n号国家。如果拉拢的国家已有联盟,则将它所属联盟一起拉拢过来,形成新的联盟。当n次拉拢结束之后,求1号国家的联盟国有几个。
    Input:
    
    有多组测试数据。每组数据有两行,第一行为n(1<=n<=350000),第二行有n个数,分别表示n个国家拉拢的对象。
    Output:
    
    对每组数据输出1号国的联盟国有几个。
    Sample Input:
    
    3
    3 3 1
    3
    2 1 2
    Sample Output:
    
    2
    2
    
    #include<stdio.h>
    #include<string>
    #include<iostream>
    #include<sstream>
    #include<algorithm>
    #include<vector>
    int fa[350001];
    
    int find(int x)
    {
        int r=x;
        while(fa[r]!=r)r=fa[r];
        int i=x;
        int j;
        while(i!=r)
        {
            j=fa[i];
            fa[i]=r;
            i=j;
        }
        return r;
    }
    void join(int x,int y)
    {
        int fx=find(x),fy=find(y);
        if(fx!=fy)
        {
             if(fx==1){fa[fy]=1;  return;}
             if(fy==1){fa[fx]=1;return;}
             else fa[fx]=fy;
    
        }
    }
    using namespace std;
    int main()
    {
         int n,m;
         while(scanf("%d",&n)==1)
         {
             for(int i=1;i<=n;i++)fa[i]=i;
             for(int i=1;i<=n;i++)
             {
                                 scanf("%d",&m);
                   join(i,m);
    
             }
             int sum=0;
             for(int i=2;i<=n;i++)
             {
                  if(find(i)==1)sum++;
             }
                      printf("%d\n",sum);
         }
    }
    
    
  • 相关阅读:
    阈值处理——实例分析
    阈值处理
    split()函数+merge()函数
    imread函数+cvtColor()函数
    OpenCV3.2.0+VS2015开发环境配置
    Javascript中的async await
    React Native 系列(一)
    React Native 系列(三)
    React Native 系列(六)
    React Native 系列(七)
  • 原文地址:https://www.cnblogs.com/sook/p/2039928.html
Copyright © 2020-2023  润新知