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

            pku 2455 Secret Milking Machine 二分+網(wǎng)絡(luò)流求獨(dú)立軌

            題目很長(zhǎng),說白了就是選擇一個(gè)子圖使得圖中最長(zhǎng)邊最短并且從a到b的弱獨(dú)立軌數(shù)目>t
            很經(jīng)典的網(wǎng)絡(luò)流做法,就不多說了- -順便放出網(wǎng)絡(luò)流模板- -這個(gè)模板曾經(jīng)過掉過2W個(gè)點(diǎn),10W個(gè)邊的圖。。。
              1 # include <cstdio>
              2 # include <cstring>
              3 # include <algorithm>
              4 using namespace std;
              5 # define typec int // type of cost
              6 # define inf  0xffffff // max of cost
              7 # define E 200000
              8 # define N 300
              9 struct edge { int x, y, nxt; typec c; } bf[E];
             10 int ne, head[N], cur[N], ps[N], dep[N];
             11 void init()
             12 {
             13     ne=0;
             14     memset(head,-1,sizeof(head));
             15 }
             16 void addedge(int x, int y, typec c)
             17 // add an arc(x -> y, c); vertex: 0 ~ n-1;
             18     bf[ne].x = x; bf[ne].y = y; bf[ne].c = c;
             19     bf[ne].nxt = head[x]; head[x] = ne++;
             20     bf[ne].x = y; bf[ne].y = x; bf[ne].c = 0;
             21     bf[ne].nxt = head[y]; head[y] = ne++;
             22 }
             23 typec flow(int n, int s, int t)
             24 {
             25     typec tr, res = 0;
             26     int i, j, k, f, r, top;
             27     while (1
             28     {
             29         memset(dep, -1, n * sizeof(int));
             30         for (f = dep[ps[0= s] = 0, r = 1; f != r; )
             31             for (i = ps[f++], j = head[i]; j!=-1; j = bf[j].nxt)
             32                 {
             33                     if (bf[j].c && -1 == dep[k = bf[j].y])
             34                     {
             35                         dep[k] = dep[i] + 1; ps[r++= k;
             36                         if (k == t) 
             37                             { f = r; break; }
             38                     }
             39                 }
             40         if (-1 == dep[t]) break;
             41         memcpy(cur, head, n * sizeof(int));
             42         for (i = s, top = 0; ; ) 
             43         {
             44             if (i == t) 
             45             {
             46                 for (k = 0, tr = inf; k < top; ++k)
             47                     if (bf[ps[k]].c < tr)
             48                         tr = bf[ps[f = k]].c;
             49                 for (k = 0; k < top; ++k)
             50                     bf[ps[k]].c -= tr, bf[ps[k]^1].c += tr;
             51                 res += tr; i = bf[ps[top = f]].x;
             52             }
             53             for (j=cur[i]; cur[i] != -1; j = cur[i] = bf[cur[i]].nxt)
             54                 if (bf[j].c && dep[i]+1 == dep[bf[j].y]) break;
             55             if (cur[i] != -1
             56             {
             57                 ps[top++= cur[i];
             58                 i = bf[cur[i]].y;
             59             }
             60             else
             61             {
             62                     if (0 == top) break;
             63                     dep[i] = -1; i = bf[ps[--top]].x;
             64             }
             65         }
             66     }
             67     return res;
             68 }
             69 //start
             70 int len[50000],data[50000][3];
             71 int main()
             72 {
             73    // freopen("input.txt","r",stdin);
             74    // freopen("output.txt","w",stdout);
             75     int n,p,t;
             76     scanf("%d%d%d",&n,&p,&t);
             77     for(int i=0;i<p;i++)
             78     {
             79       scanf("%d%d%d",&data[i][0],&data[i][1],&data[i][2]);
             80       len[i]=data[i][2];
             81     }
             82     sort(len,len+p);
             83     int e=unique(len,len+p)-len-1,s=0;
             84     while(s<=e)
             85     {
             86        int mid=(s+e)/2;
             87        init();
             88        for(int i=0;i<p;i++)
             89          if(data[i][2]<=len[mid])
             90            {
             91                addedge(data[i][0],data[i][1],1);
             92                addedge(data[i][1],data[i][0],1);
             93            }
             94        int res=flow(n+1,1,n);
             95        if(res>=t)
             96           e=mid-1;
             97        else
             98           s=mid+1;
             99     }
            100     printf("%d\n",len[s]);
            101    // system("pause");
            102     return 0;
            103 }
            104 



            posted on 2010-10-28 01:56 yzhw 閱讀(204) 評(píng)論(0)  編輯 收藏 引用 所屬分類: graph

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

            導(dǎo)航

            統(tǒng)計(jì)

            公告

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

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            久久99热这里只频精品6| 久久久久久精品无码人妻| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 国产亚洲综合久久系列| 2021国内精品久久久久久影院| 久久久久久A亚洲欧洲AV冫| 日本免费一区二区久久人人澡| 国内精品久久人妻互换| 久久久亚洲欧洲日产国码aⅴ | 久久久国产99久久国产一| 久久免费视频一区| 久久久亚洲精品蜜桃臀| 久久久精品久久久久特色影视| 国产精品美女久久久网AV| 国产成人精品综合久久久| 丁香五月综合久久激情| 99久久夜色精品国产网站| 精品免费久久久久国产一区| 国产免费久久久久久无码| 精品久久国产一区二区三区香蕉 | 综合久久久久久中文字幕亚洲国产国产综合一区首 | 无码乱码观看精品久久| 亚洲欧洲久久av| 久久99热这里只有精品国产| 婷婷五月深深久久精品| 97久久综合精品久久久综合| 中文字幕久久欲求不满| 久久精品成人免费国产片小草| 久久一本综合| 亚洲午夜久久久久妓女影院| 久久久久国产精品熟女影院 | 国产精久久一区二区三区| 久久久久国产一级毛片高清板 | AV无码久久久久不卡蜜桃| 久久久久亚洲av无码专区| 99久久综合狠狠综合久久止| 激情五月综合综合久久69| 波多野结衣久久一区二区| 久久精品国产亚洲AV高清热| 狠狠久久综合伊人不卡| 久久亚洲中文字幕精品有坂深雪 |