• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Yiner的ACM

            成長的痕跡
            <2011年4月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            統計

            • 隨筆 - 29
            • 文章 - 0
            • 評論 - 2
            • 引用 - 0

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            并查集 POJ2524
            已知有n個大學生,其中有m對宗教信仰相同的學生,請你估算這n個學生中最多有多少種宗教信仰。
            依舊是簡單的并查集應用。宗教信仰的最大值為學生數n,因此一開始把n個學生作為n個集合,對給出的每對大學生 a 和 b ,如果他們在不同的集合,就合并他們,然后宗教數減一。 這次依舊用到了路徑壓縮,只不過上一次寫的是非遞歸,這次寫了一個遞歸版本。也就是搜索完成回溯的時候"順便"將當前節點的父節點直接指向祖先節點。

            題目大意解釋來自Slyar Home (www.slyar.com) 轉載請注明,謝謝合作。
            /*如果兩個學生的信仰一樣
                則總的宗教個數減一 
            */

            #include
            <iostream>
            #include
            <stdio.h>
            using namespace std;
            int sum,n,m;
            int father[50001];

            void makeset(int x)
            {
                
            for(int i=1;i<=x;i++)
                
            {
                    father[i]
            =i;
                }

            }


            int findset(int x)//
            {
                
            if(x!=father[x])
                
            {
                    father[x]
            =findset(father[x]);
                }
            //回溯
                return father[x];
            }



            void Union(int a,int b)
            {
               
            int x=findset(a);
               
            int y=findset(b);
               
            if(x==y)
               
            return;
               sum
            =sum-1;
               father[y]
            =x;
            }



            int main()
            {
                
            int l=1;
                
            while(scanf("%d%d",&n,&m)!=EOF)
                
            {    if(n==0&&m==0)
                      
            break;
                    sum
            =n;
                    makeset(n);
                    
            int first,second;
                    
            for(int i=1;i<=m;i++)
                    
            {
                        scanf(
            "%d%d",&first,&second);
                        Union(first,second);
                    }

                    printf(
            "Case %d: %d\n",l,sum);
                            l
            ++;
                }

                
            return 0;
            }

            posted on 2011-03-30 11:24 Yiner 閱讀(319) 評論(0)  編輯 收藏 引用 所屬分類: 并查集

            久久精品人成免费| 成人综合久久精品色婷婷| 国产精品久久久亚洲| 亚洲色欲久久久综合网| 99久久国语露脸精品国产| 国产毛片久久久久久国产毛片| 国产成人无码精品久久久免费 | 久久久久久久久久久| 久久久久亚洲AV片无码下载蜜桃| 国产综合久久久久| 伊人久久大香线蕉精品不卡 | 亚洲国产精品一区二区三区久久| 国内精品久久久久久久久电影网| 国产精品一久久香蕉国产线看| 精品国产一区二区三区久久蜜臀| 一本一道久久综合狠狠老| 高清免费久久午夜精品| 国产69精品久久久久观看软件| 精品国产91久久久久久久| 99久久香蕉国产线看观香| 一本大道久久a久久精品综合| 狠狠色婷婷久久综合频道日韩| 99精品久久久久久久婷婷| 久久精品人人做人人爽电影蜜月 | 久久久久久久人妻无码中文字幕爆 | 亚洲精品无码久久久影院相关影片| 久久精品国产男包| 蜜桃麻豆www久久国产精品| 色综合色天天久久婷婷基地| 亚洲国产美女精品久久久久∴ | 久久国产免费观看精品3| 一级A毛片免费观看久久精品| 国产精品内射久久久久欢欢 | 久久夜色撩人精品国产小说| 国产成人精品久久一区二区三区| 午夜精品久久久久久久久| 久久亚洲AV无码精品色午夜| 亚洲国产成人久久精品99 | 国产精品99久久精品爆乳| 国产精品毛片久久久久久久| 久久免费的精品国产V∧|