• <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 縮點+最小生成樹

            題意:
            給出N個點,若干邊的帶權(quán)無向圖,然后若干個點已經(jīng)相連了,求使得整個圖聯(lián)通的最小代價。
            解法:
            這題一般做法是縮點+最小生成樹,但是由于這題的特殊性,可以不用顯式的縮點,用并查集將已經(jīng)聯(lián)通的點合并后直接使用kustral算法構(gòu)造最小生成樹,至于判斷圖是否聯(lián)通,一遍DFS判斷點數(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 閱讀(503) 評論(0)  編輯 收藏 引用 所屬分類: graph

            <2012年2月>
            2930311234
            567891011
            12131415161718
            19202122232425
            26272829123
            45678910

            導(dǎo)航

            統(tǒng)計

            公告

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

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久乐国产综合亚洲精品| 久久国产香蕉视频| 国产偷久久久精品专区| 久久综合九色综合欧美狠狠| 久久综合九色综合欧美就去吻| 久久婷婷五月综合97色直播| 精品水蜜桃久久久久久久| 成人免费网站久久久| 亚洲国产精品无码久久一区二区| 久久久久久无码国产精品中文字幕 | 一本伊大人香蕉久久网手机| 中文字幕无码精品亚洲资源网久久| 久久久久亚洲AV无码永不| 久久精品国产亚洲av麻豆蜜芽| 久久无码人妻一区二区三区 | 日产精品久久久久久久| 69久久夜色精品国产69| 性做久久久久久久久老女人| 国产午夜精品理论片久久| 亚洲AV乱码久久精品蜜桃| 久久性精品| 国产精品免费久久久久影院| 久久久久久久99精品免费观看| 久久99这里只有精品国产| 亚洲天堂久久久| 国产午夜精品久久久久九九电影| 丰满少妇高潮惨叫久久久| 久久久久综合网久久| 亚洲午夜久久久久妓女影院| 久久免费99精品国产自在现线| 久久亚洲高清观看| 久久精品www人人爽人人| 久久国产劲爆AV内射—百度| 人妻少妇精品久久| 无码精品久久一区二区三区 | 国产精品免费久久久久久久久 | 国产91久久综合| 精品99久久aaa一级毛片| 国产午夜精品久久久久九九| 久久精品国产一区二区电影| 久久久精品国产Sm最大网站|