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

            <2011年1月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            精品国产乱码久久久久软件| 狠狠色丁香久久婷婷综| 久久国产高清一区二区三区| 亚洲va中文字幕无码久久不卡| 无码国内精品久久人妻麻豆按摩| 国产精品伊人久久伊人电影| 亚洲综合精品香蕉久久网97 | 久久久噜噜噜www成人网| 久久久亚洲欧洲日产国码是AV| 久久综合视频网站| 伊人久久大香线蕉综合网站| 亚洲精品国精品久久99热| 久久精品免费一区二区| 人妻少妇久久中文字幕| 国产亚洲欧美成人久久片| 欧美久久综合性欧美| 日本久久久久久久久久| 久久综合视频网| 国产精品久久久久久福利69堂| 久久精品国产99国产电影网 | 青青青青久久精品国产| 久久WWW免费人成—看片| 中文字幕久久精品| 久久国产乱子伦免费精品| 亚洲国产成人久久精品动漫| 国产精品一区二区久久精品涩爱 | 99精品久久精品一区二区| 国内精品久久国产大陆| 久久综合九色综合久99| 久久精品毛片免费观看| 国产69精品久久久久9999| 一本色道久久综合| 国产美女久久精品香蕉69| 精品水蜜桃久久久久久久| 久久精品国产99久久无毒不卡| 久久久免费观成人影院| 国内精品久久久久久99| 国产精品久久久久久久人人看 | 国产亚洲婷婷香蕉久久精品| 亚洲国产精品成人久久蜜臀| 欧美日韩中文字幕久久伊人|