zoukankan      html  css  js  c++  java
  • uva 1160 XPlosives

    /*
    题意:往仓库里放炸药,把关键引爆炸药的数对拿出并计数
    数学模型:输入数对,判断是否成环eg(1,2  2,3  3,4,  1,4)这个时候要计数。
    该题中让人费解反复的的是n种材料是不是都出现才会引爆?不是
    eg(1,2 2,4 1,4)也要累加计数。
    核心算法:并查集、判环 前面的数和当前的这个数只要都是一个根节点时就判为环 否则归并
    为一个集合一个根节点-1止。
    输入时候注意:循环输入EOF,开始时用了while(1)超时了没有节制注意一下
    Root :: AOAPC I: Beginning Algorithm Contests -- Training Guide (Rujia Liu)
    :: Chapter 3. Data Structures :: Fundamental Data Structures :: Examples        
    */
    //AC不容易
    #include<stdio.h>
    #include<string.h>
    const int M=100010;//100000+10;
    int ct;
    int fa[M];
    void inist()
    {
        int i;
        for(i=0;i<M;i++)
        fa[i+1]=i+1;
    }
    int find(int x)//查根节点
    {
        while(fa[x]!=x)
        x=fa[x];
        return x ;
        //else return x;
    }
    void Union(int a,int b)//并查集
    {
        int i,j,k;
        int f1,f2;
        f1=find(a);
        f2=find(b);
        if(f1!=f2)
        {
            fa[f1]=fa[f2];
        }
        else ct++;
    }
    int main()
    {
        int a,b;
        while(scanf("%d",&a)!=EOF)//此处必须EOF的方式处理
        //不然就会判定为超时!!!
        {
            ct=0;
            inist();//初始化所有根节点
            while(a!=-1)
            {
                scanf("%d",&b);//if(a==-1)break;
                Union(a,b);//并查集
                scanf("%d",&a);
            }
            printf("%d\n",ct);
            }
        return 0;
    }
    /*
    int main()
    {
        int a,b;
        while(1)
        {
            ct=0;
            inist();//初始化根节点
            while(1)//超时!!!!
            {

                scanf("%d",&a);
                if(a==-1)break;
                scanf("%d",&b);
                Union(a,b);
            }
            printf("%d\n",ct);

        }
        return 0;
    }//*/

  • 相关阅读:
    BZOJ1001 狼抓兔子 终于过了!
    BZOJ 1901: Zju2112 Dynamic Rankings( 树状数组套主席树 )
    BZOJ 2302: [HAOI2011]Problem c( dp )
    BZOJ 1407: [Noi2002]Savage( 数论 )
    BZOJ 2661: [BeiJing wc2012]连连看( 费用流 )
    BZOJ 1021: [SHOI2008]Debt 循环的债务( dp )
    BZOJ 3170: [Tjoi 2013]松鼠聚会( sort )
    BZOJ 2301: [HAOI2011]Problem b( 数论 )
    BZOJ 2434: [Noi2011]阿狸的打字机( AC自动机 + DFS序 + 树状数组 )
    BZOJ 3231: [Sdoi2008]递归数列( 矩阵快速幂 )
  • 原文地址:https://www.cnblogs.com/someonelikeyou/p/2916902.html
Copyright © 2011-2022 走看看