• <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>

            hdu 3371 connect the citys 縮點(diǎn)+最小生成樹(shù)

            題意:
            給出N個(gè)點(diǎn),若干邊的帶權(quán)無(wú)向圖,然后若干個(gè)點(diǎn)已經(jīng)相連了,求使得整個(gè)圖聯(lián)通的最小代價(jià)。
            解法:
            這題一般做法是縮點(diǎn)+最小生成樹(shù),但是由于這題的特殊性,可以不用顯式的縮點(diǎn),用并查集將已經(jīng)聯(lián)通的點(diǎn)合并后直接使用kustral算法構(gòu)造最小生成樹(shù),至于判斷圖是否聯(lián)通,一遍DFS判斷點(diǎn)數(shù)是否相等即可。
            附帶嗎
              1 import java.util.*;
              2 import java.io.*;
              3 public class Main {
              4 
              5     /**
              6      * @param args
              7      */
              8     static int n=0,m=0,k=0;
              9     static int pre[]=new int[501];
             10     static int buffer[]=new int[501];
             11     static int g[]=new int[501],nxt[]=new int[50001],v[]=new int[50001],c=0
             12     static boolean used[]=new boolean[501];
             13     static class edge implements Comparable<edge>
             14     {
             15         int a,b,v;
             16         public int compareTo(edge pos)
             17         {
             18             return v-pos.v;
             19         }
             20     }
             21     static edge data[]=new edge[25001];
             22     static int find(int pos)
             23     {
             24         if(pre[pos]==pos) return pos;
             25         else
             26         {
             27             pre[pos]=find(pre[pos]);
             28             return pre[pos];
             29         }
             30     }
             31     static void insert(int s,int e)
             32     {
             33         v[c]=e;
             34         nxt[c]=g[s];
             35         g[s]=c++;
             36     }
             37     static void dfs(int pos)
             38     {
             39         if(used[pos]) return;
             40         used[pos]=true;
             41         for(int p=g[pos];p!=-1;p=nxt[p])
             42             dfs(v[p]);
             43     }
             44     public static void main(String[] args) throws IOException{
             45         StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
             46         in.nextToken();
             47         int test=(int)in.nval;
             48         for(int i=0;i<data.length;i++)
             49             data[i]=new edge();
             50         while((test--)!=0)
             51         {
             52             
             53             in.nextToken();
             54             n=(int)in.nval;
             55             in.nextToken();
             56             m=(int)in.nval;
             57             in.nextToken();
             58             k=(int)in.nval;
             59             for(int i=0;i<m;i++)
             60             {
             61                 in.nextToken();
             62                 data[i].a=(int)in.nval;
             63                 in.nextToken();
             64                 data[i].b=(int)in.nval;
             65                 in.nextToken();
             66                 data[i].v=(int)in.nval;
             67             }
             68             for(int i=1;i<=n;i++)
             69             {
             70                 pre[i]=i;
             71                 g[i]=-1;
             72             }
             73             for(int i=0;i<k;i++)
             74             {
             75                 in.nextToken();
             76                 int t=(int)in.nval;
             77                 for(int j=0;j<t;j++)
             78                 {
             79                     in.nextToken();
             80                     buffer[j]=(int)in.nval;
             81                 }
             82                 for(int j=1;j<t;j++)
             83                     pre[find(buffer[0])]=find(buffer[j]);
             84             }
             85             int total=0;
             86             Arrays.sort(data, 0, m);
             87             c=0;
             88             for(int i=0;i<m;i++)
             89             {
             90                 insert(find(data[i].a),find(data[i].b));
             91                 insert(find(data[i].b),find(data[i].a));
             92                 
             93             }
             94 
             95             Arrays.fill(used,false);
             96             int sum=0;
             97             for(int i=1;i<=n;i++)
             98                 used[find(i)]=true;
             99             for(int i=1;i<=n;i++)
            100                 if(used[i]) sum++;
            101             Arrays.fill(used,false);
            102             dfs(find(1));
            103             for(int i=1;i<=n;i++)
            104                 if(used[i]) sum--;
            105             if(sum!=0)
            106             {
            107                 System.out.println(-1);
            108                 continue;
            109             }
            110             
            111             for(int i=0;i<m;i++)
            112                 if(find(data[i].a)!=find(data[i].b))
            113                 {
            114                     pre[find(data[i].a)]=data[i].b;
            115                     total+=data[i].v;
            116                 }
            117             System.out.println(total);
            118         }
            119 
            120     }
            121 
            122 }
            123 

            posted on 2010-11-27 17:17 yzhw 閱讀(497) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): graph

            <2010年11月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            統(tǒng)計(jì)系統(tǒng)

            留言簿(1)

            隨筆分類(lèi)(227)

            文章分類(lèi)(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            99久久免费国产精精品| 狠狠色婷婷久久一区二区三区| 久久久久亚洲AV无码去区首| 国产精品久久久久乳精品爆| 久久久国产精华液| 久久婷婷午色综合夜啪| 亚洲精品乱码久久久久久按摩| 99久久综合狠狠综合久久止| 久久综合久久综合久久| 人妻精品久久久久中文字幕| 伊人久久综合成人网| 国产99精品久久| 久久无码AV中文出轨人妻| 中文字幕久久精品无码| 办公室久久精品| 18岁日韩内射颜射午夜久久成人| 久久99精品国产99久久| 午夜精品久久久久| 伊人久久大香线蕉精品| 久久中文字幕人妻熟av女| 久久―日本道色综合久久| 精品久久久久久久久免费影院| 精品熟女少妇av免费久久| 亚洲精品久久久www| 国产精品一区二区久久| 亚洲人成无码久久电影网站| 国产精品久久久久久搜索 | 国产99久久久久久免费看| 一级做a爰片久久毛片毛片| a级成人毛片久久| 久久久亚洲AV波多野结衣| 国产精品无码久久久久| 国产精品免费看久久久| 久久精品免费一区二区| 青青草原综合久久大伊人导航| 韩国三级大全久久网站| 亚洲伊人久久精品影院| 亚洲美日韩Av中文字幕无码久久久妻妇| 久久99中文字幕久久| 久久婷婷五月综合色高清| 亚洲伊人久久成综合人影院|