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;
    }
  • 相关阅读:
    [牛客]十二桥问题 解题报告
    [NOIP2017 逛公园] 解题报告
    [JSOI2008]最小生成树计数 解题报告
    类欧几里得算法
    概率与期望题目列表
    [SCOI2008]配对 解题报告
    拦截导弹
    牛客网-约数的个数
    牛客网-成绩排名
    最大连续区间和的算法总结
  • 原文地址:https://www.cnblogs.com/tun117/p/4403128.html
Copyright © 2011-2022 走看看