zoukankan      html  css  js  c++  java
  • poj2455Secret Milking Machine(二分+最大流)

    链接

    二分距离,小于当前距离的边容量+1,使最后流>=t 

    注意 会有重边

      1 #include <iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<algorithm>
      5 #include<stdlib.h>
      6 #include<vector>
      7 #include<cmath>
      8 #include<queue>
      9 #include<set>
     10 using namespace std;
     11 #define N 205
     12 #define LL long long
     13 #define INF 0xfffffff
     14 const double eps = 1e-8;
     15 const double pi = acos(-1.0);
     16 const double inf = ~0u>>2;
     17 int path[N],flow[N],gh[N][N],st,en;
     18 int w[N][N];
     19 struct node
     20 {
     21     int u,v,c;
     22 }q[N*N];
     23 int bfs()
     24 {
     25     int i;
     26     memset(path,-1,sizeof(path));
     27     for(i = 1 ; i <= en ; i++)
     28     flow[i] = INF;
     29     queue<int>q;
     30     q.push(1);
     31     while(!q.empty())
     32     {
     33         int tk = q.front();
     34         q.pop();
     35         if(tk==en)
     36         break;
     37         for(i = 1 ; i <= en ; i++)
     38         {
     39             if(path[i]==-1&&gh[tk][i])
     40             {
     41                 path[i] = tk;
     42                 flow[i] = min(flow[tk],gh[tk][i]);
     43                 q.push(i);
     44             }
     45         }
     46     }
     47     if(path[en]==-1)
     48     return -1;
     49     return flow[en];
     50 }
     51 int EK()
     52 {
     53     int now,pre,sum=0,k;
     54     while((k=bfs())!=-1)
     55     {
     56         sum+=k;
     57         now = en;
     58         while(now!=st)
     59         {
     60             pre = path[now];
     61             gh[pre][now]-=k;
     62             gh[now][pre]+=k;
     63             now = pre;
     64         }
     65     }
     66     return sum;
     67 }
     68 int main()
     69 {
     70     int n,p,i,m;
     71     while(scanf("%d%d%d",&n,&p,&m)!=EOF)
     72     {
     73         for(i = 1; i <= p ;i++)
     74         {
     75             scanf("%d%d%d",&q[i].u,&q[i].v,&q[i].c);
     76             q[i].u++,q[i].v++;
     77         }
     78         st = 1;
     79         en = n+2;
     80         int low = 0,high = 1000000,mid;
     81         while(low<=high)
     82         {
     83             mid = (low+high)>>1;
     84             memset(gh,0,sizeof(gh));
     85             gh[st][2] = m;
     86             gh[n+1][en] = m;
     87             for(i = 1;i <= p ; i++)
     88             if(q[i].c<=mid)
     89             {
     90                 gh[q[i].u][q[i].v]+=1;
     91                 gh[q[i].v][q[i].u]+=1;
     92             }
     93             if(EK()==m)
     94             high = mid-1;
     95             else
     96             low =mid+1;
     97         }
     98         cout<<low<<endl;
     99     }
    100     return 0;
    101 }
    View Code
  • 相关阅读:
    HDU 2844 Coins(多重背包)
    HDU 4540 威威猫系列故事——打地鼠(DP)
    Codeforces Round #236 (Div. 2)
    FZU 2140 Forever 0.5
    HDU 1171 Big Event in HDU(DP)
    HDU 1160 FatMouse's Speed(DP)
    ZOJ 3490 String Successor
    ZOJ 3609 Modular Inverse
    ZOJ 3603 Draw Something Cheat
    ZOJ 3705 Applications
  • 原文地址:https://www.cnblogs.com/shangyu/p/3711374.html
Copyright © 2011-2022 走看看