• <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 閱讀(497) 評論(0)  編輯 收藏 引用 所屬分類: graph

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計

            公告

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

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久精品国产精品青草app| 狠狠色丁香久久婷婷综合蜜芽五月| 亚洲精品美女久久久久99| 午夜天堂av天堂久久久| 青青青伊人色综合久久| 2021久久精品免费观看| 久久er国产精品免费观看2| 久久久久久久国产免费看| 久久综合色老色| 久久国产精品成人免费| 久久亚洲sm情趣捆绑调教 | 国内精品久久国产| 99久久99这里只有免费的精品| 久久久99精品成人片中文字幕| 久久久久久国产精品免费无码| 久久国产乱子伦精品免费午夜| 久久天堂AV综合合色蜜桃网| 久久亚洲高清综合| 亚洲天堂久久精品| 久久亚洲AV成人无码电影| 欧美亚洲另类久久综合婷婷| 亚洲午夜久久影院| 久久久九九有精品国产| 国产精品无码久久综合| 99久久99久久精品国产片果冻| 亚洲精品乱码久久久久久蜜桃| 午夜不卡888久久| 狠狠色婷婷综合天天久久丁香 | 国产精品成人精品久久久 | 看久久久久久a级毛片| 怡红院日本一道日本久久 | 久久影院亚洲一区| 四虎国产精品免费久久5151| 精品无码久久久久国产| 久久亚洲日韩精品一区二区三区| 午夜精品久久影院蜜桃| 色99久久久久高潮综合影院| 日本亚洲色大成网站WWW久久| 久久无码国产| 伊人久久大香线蕉AV色婷婷色 | 久久精品国产亚洲av麻豆图片|