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

            pku2914 Minimum Cut 無向圖最小割 Stoer_Wagner算法

            題目不用描述了,很裸,求一個無向圖的最小割。
            用網絡流+枚舉這題肯定TLE,學到一個新算法,貼代碼,大家可以作為模板
              1 #include <cmath>
              2 
              3 #include <cstdio>
              4 
              5 #include <memory.h>
              6 
              7 #include <algorithm>
              8 
              9 #include <iomanip>
             10 
             11 #include <iostream>
             12 
             13 #include <vector>
             14 
             15 #include <string>
             16 
             17 #include <queue>
             18 
             19  
             20 
             21 using namespace std;
             22 
             23  
             24 
             25 const int N = 500 + 3;
             26 
             27  
             28 
             29 int n, m;
             30 
             31 int mat[N][N];
             32 
             33 int dist[N];
             34 
             35 int visited[N];
             36 
             37 int del[N];  // true表示該點已經被刪掉
             38 
             39  
             40 
             41 // 結點~n
             42 
             43 int Stoer_Wagner()
             44 
             45 {
             46 
             47      int minCut = INT_MAX;  // 無向圖最小割
             48 
             49      int tmp;
             50 
             51      int i, t, j, k, pre;
             52 
             53      int s = 1;   // 源點
             54 
             55      memset(del, 0sizeof(del));
             56 
             57  
             58 
             59      for (t = 1; t < n; t++)  // n - 1次Maximum Adjacency Search
             60 
             61      {
             62 
             63          for (i = 1; i <= n; i++)
             64 
             65               if (!del[i])
             66 
             67                    dist[i] = mat[s][i];
             68 
             69  
             70 
             71          memset(visited, 0sizeof(visited));
             72 
             73          visited[s] = 1;
             74 
             75          k = s;
             76 
             77          for (i = 1; i <= n - t; i++)  // 每次剩下n - t + 1個結點
             78 
             79          {
             80 
             81               tmp = -1e9;
             82 
             83               pre = k;
             84 
             85               k = 0;
             86 
             87               for (j = 1; j <= n; j++)
             88 
             89               {
             90 
             91                    if (!del[j] && !visited[j] && dist[j] > tmp)
             92 
             93                    {
             94 
             95                        k = j;
             96 
             97                        tmp = dist[j];
             98 
             99                    }
            100 
            101               }
            102 
            103               if (!k) return 0;  // 不連通
            104 
            105  
            106 
            107               visited[k] = 1;
            108 
            109               for (j = 1; j <= n; j++)
            110 
            111                    if (!del[j] && !visited[j])
            112 
            113                        dist[j] += mat[k][j];
            114 
            115          }
            116 
            117  
            118 
            119          minCut = min(minCut, dist[k]);
            120 
            121          del[k] = 1;  // 刪除k點
            122 
            123  
            124 
            125          // 合并k點和源點
            126 
            127          
            128 
            129          for (i = 1; i <= n; i++)
            130 
            131               if (!del[i] && i != pre)
            132 
            133               {
            134 
            135                    mat[pre][i] += mat[k][i];
            136 
            137                    mat[i][pre] = mat[pre][i];
            138 
            139               }
            140 
            141      }
            142 
            143  
            144 
            145      return minCut;
            146 
            147 }
            148 
            149  
            150 
            151 int main ()
            152 
            153 {
            154 
            155      int u, v, w, i;
            156 
            157      while (scanf("%d%d"&n, &m) != EOF)
            158 
            159      {
            160 
            161          memset(mat, 0sizeof(mat));
            162 
            163          while (m--)
            164 
            165          {
            166 
            167               scanf("%d%d%d"&u, &v, &w);
            168 
            169               if (u == v) continue;  
            170 
            171               mat[u + 1][v + 1+= w;
            172 
            173               mat[v + 1][u + 1+= w;
            174 
            175          }
            176 
            177          printf("%d\n", Stoer_Wagner());
            178 
            179      }
            180 
            181 }
            182 
            183 


            posted on 2010-10-25 23:42 yzhw 閱讀(420) 評論(0)  編輯 收藏 引用 所屬分類: graph

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            国产V亚洲V天堂无码久久久| 国产真实乱对白精彩久久| 久久国产影院| 99久久精品免费看国产一区二区三区 | 久久天天躁狠狠躁夜夜av浪潮 | 99久久精品费精品国产 | 久久久久久久综合综合狠狠| 久久无码专区国产精品发布| 国产69精品久久久久99尤物| 久久午夜无码鲁丝片| 久久亚洲高清综合| 国内精品久久久久伊人av| 四虎亚洲国产成人久久精品| 国产午夜精品久久久久免费视| 国产精品美女久久久久AV福利| 香蕉久久夜色精品升级完成| 久久成人国产精品免费软件| 日韩一区二区三区视频久久| 久久本道伊人久久| 激情伊人五月天久久综合| 一本色道久久88综合日韩精品 | 久久久精品国产免大香伊 | 国产精品99久久久久久猫咪 | 亚洲精品乱码久久久久66| 久久久久99精品成人片三人毛片| 久久av无码专区亚洲av桃花岛| 亚洲精品无码久久久久久| 日本精品久久久久久久久免费| 久久精品国内一区二区三区| 久久久久AV综合网成人| 性高湖久久久久久久久| 久久婷婷国产综合精品| 国产人久久人人人人爽| 狠狠88综合久久久久综合网 | 亚洲中文字幕久久精品无码APP| 久久这里有精品视频| 香蕉久久影院| 777午夜精品久久av蜜臀| 人妻无码αv中文字幕久久| 婷婷久久香蕉五月综合加勒比| 人妻无码αv中文字幕久久|