zoukankan      html  css  js  c++  java
  • POJ 1611

    菜鸟第一次做这种。想了好一会儿.==

    首先还是初始化记忆数组,使得每一个元素的初始根节点是自己。

    然后是对输入的数据进行并集。我们拿出每组元素的第一个作为根节点。

    每次检测是否已经存在根节点。如果存在根节点压缩该元素通往新的根节点的路径,同时将其原来的根节点接在新的根节点上。

    第一次WA是因为忽略了剩余元素的根节点没有更新。倒数第二个循环用于把所有点都连接到根节点上。

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    int stu[30000];
    int main()
    {
        int n,m,k,tmp1,tmp2,tmp3,er;
        scanf("%d%d",&n,&m);
        while(n)
        {
            for(int i=0;i<n;i++)
            {
                stu[i]=i;
            }
            for(int i=0;i<m;i++)
            {
                scanf("%d",&k);
                scanf("%d",&tmp1);
                for(int j=0;j<k-1;j++)
                {
                    scanf("%d",&tmp2);
                    while(stu[tmp2]!=tmp2)
                    {
                        tmp3=tmp2;
                        tmp2=stu[tmp2];
                        stu[tmp3]=stu[tmp1];
                    }
                    stu[tmp2]=stu[tmp1];
                }
            }
            er=0;
            for(int i=0;i<n;i++)
            {
                tmp2=i;
                while(stu[tmp2]!=tmp2)
                {
                    tmp2=stu[tmp2];
                }
                stu[i]=tmp2;
            }
            for(int i=0;i<n;i++)
            {
                if(stu[i]==stu[0])
                {
                    er++;
                }
            }
            printf("%d
    ",er);
            scanf("%d%d",&n,&m);
        }
        return 0;
    }
  • 相关阅读:
    Android平板电脑开发实战详解和典型案例
    UG NX10.0技术大全(不附光盘)
    SolidWorks 2018中文版机械设计应用大全
    1192.回文字符串
    1193.矩阵转置
    1195.最长&最短文本
    1194.八进制
    1196.成绩排序
    1197.奇偶检验
    1199.找位置
  • 原文地址:https://www.cnblogs.com/tun117/p/4403128.html
Copyright © 2011-2022 走看看