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

            閱讀排行榜

            久久婷婷五月综合97色直播| 亚洲国产精品无码成人片久久| 久久夜色精品国产网站| 久久久久亚洲AV成人片| 久久综合综合久久97色| 国产精品久久婷婷六月丁香| 69SEX久久精品国产麻豆| 狠狠色丁香婷综合久久| 欧美激情一区二区久久久| 国产成人综合久久综合| 亚洲精品tv久久久久| 伊人丁香狠狠色综合久久| 亚洲va久久久噜噜噜久久狠狠| 久久免费线看线看| 久久久噜噜噜www成人网| 久久毛片免费看一区二区三区| 国产精品对白刺激久久久| 中文字幕精品久久久久人妻| 99久久精品国产毛片| 99久久无色码中文字幕| 久久99热这里只有精品国产| 精品视频久久久久| 大伊人青草狠狠久久| 久久久av波多野一区二区| 波多野结衣久久精品| 久久久久久久国产免费看| 久久青草国产精品一区| 99久久精品国内| 国产一区二区精品久久 | 久久精品国产亚洲AV麻豆网站| 亚洲AⅤ优女AV综合久久久| 一级做a爰片久久毛片16| 久久综合久久综合九色| 久久亚洲精品视频| 99久久国产免费福利| 国内精品久久久久久久coent| 91久久精品电影| 久久99久久无码毛片一区二区| 狠狠综合久久综合中文88| 久久国产视屏| 久久天天躁夜夜躁狠狠|