• <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 二分+網絡流求獨立軌

            題目很長,說白了就是選擇一個子圖使得圖中最長邊最短并且從a到b的弱獨立軌數目>t
            很經典的網絡流做法,就不多說了- -順便放出網絡流模板- -這個模板曾經過掉過2W個點,10W個邊的圖。。。
              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) 評論(0)  編輯 收藏 引用 所屬分類: graph

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

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            亚洲AV无码一区东京热久久| 国产精品久久久久影院色| 国产精品久久久久久久| 久久精品国产亚洲av麻豆图片 | 综合久久给合久久狠狠狠97色| 情人伊人久久综合亚洲| 国产精品久久久久久搜索| 久久久久人妻精品一区| 奇米影视7777久久精品| 狠狠色婷婷久久一区二区| 久久久久高潮综合影院| 久久人人爽人人爽人人片AV麻烦| 久久久久久亚洲精品不卡| 久久国产视频99电影| 久久最新免费视频| 亚洲精品无码久久毛片| 久久精品国产亚洲AV久| 久久久久国产精品人妻 | 久久免费看黄a级毛片| | 久久国产精品成人影院| 久久亚洲日韩精品一区二区三区| 人妻丰满AV无码久久不卡| 国产精品禁18久久久夂久| aaa级精品久久久国产片| 亚洲午夜精品久久久久久人妖| 日韩精品久久久久久| 激情综合色综合久久综合| 亚洲AV伊人久久青青草原| 久久久这里有精品| 成人妇女免费播放久久久| 亚洲国产精品久久久久网站| 欧美激情精品久久久久久久九九九 | 久久青青草原精品国产| 日本一区精品久久久久影院| 三级韩国一区久久二区综合| 狠狠色狠狠色综合久久| 日本久久久精品中文字幕| 亚州日韩精品专区久久久| 国产成人无码久久久精品一| 精品久久久久一区二区三区|