• <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),說(shuō)白了就是選擇一個(gè)子圖使得圖中最長(zhǎng)邊最短并且從a到b的弱獨(dú)立軌數(shù)目>t
            很經(jīng)典的網(wǎng)絡(luò)流做法,就不多說(shuō)了- -順便放出網(wǎng)絡(luò)流模板- -這個(gè)模板曾經(jīng)過(guò)掉過(guò)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 閱讀(207) 評(píng)論(0)  編輯 收藏 引用 所屬分類: graph

            <2010年12月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導(dǎo)航

            統(tǒng)計(jì)

            公告

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

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            久久99国产一区二区三区| 精品综合久久久久久98| 97久久精品人人澡人人爽| 精品久久久久久国产牛牛app| 色欲综合久久躁天天躁| 无码日韩人妻精品久久蜜桃 | 亚洲国产精品无码久久久久久曰| 久久亚洲国产精品五月天婷| 国产成人精品综合久久久久 | 一级做a爰片久久毛片看看| 亚洲狠狠婷婷综合久久蜜芽| 国产精品女同一区二区久久| 色婷婷综合久久久中文字幕 | 久久精品无码一区二区三区| 久久人人爽人人爽人人片AV不 | 色综合久久88色综合天天 | 亚洲va国产va天堂va久久| 亚洲综合婷婷久久| 漂亮人妻被黑人久久精品| 中文字幕久久精品 | 久久国产精品99国产精| 色婷婷狠狠久久综合五月| 国产福利电影一区二区三区,免费久久久久久久精| 久久久亚洲欧洲日产国码是AV| 国产伊人久久| 久久午夜电影网| 精品久久777| 国产成人久久精品区一区二区| 亚洲国产一成人久久精品| 伊人久久大香线蕉综合影院首页 | 久久99九九国产免费看小说| 亚洲精品国产成人99久久| 国产精品久久久久9999高清| 精品国产乱码久久久久久郑州公司 | 久久狠狠高潮亚洲精品| 一本一本久久A久久综合精品 | 国产香蕉久久精品综合网| 亚洲国产成人久久精品99 | 久久人人超碰精品CAOPOREN| 色综合久久中文字幕综合网| 色综合久久久久综合99|