zoukankan      html  css  js  c++  java
  • nyoj 310二分+dinic

    #include<stdio.h>
    #include<queue>
    #include<string.h>
    using namespace std;
    #define inf 0x7fffffff
    #define N 300
    int p,t,n;
    int Min(int a,int b) {
    return a>b?b:a;
    }
    struct node {
       int u,v,w,f;
    }mp[40001];
    int flow[N][N],d[N];
    int bfs() {
     int cur,i;
     queue<int>q;
     memset(d,0,sizeof(d));
     d[1]=1;
       q.push(1);
        while(!q.empty()) {
            cur=q.front();
            q.pop();
            for(i=1;i<=n;i++)
         if(flow[cur][i]&&!d[i]) {
              d[i]=d[cur]+1;
              if(i==n)
                return 1;
               q.push(i);
         }
        }
        return 0;
    }
    int dfs(int u,int limit) {
        if(u==n)
            return limit;
      int cost=0,i,k;
     for(i=1;i<=n;i++)
        if(d[i]==d[u]+1&&flow[u][i]) {
            k=dfs(i,Min(limit-cost,flow[u][i]));
            if(k>0) {
                flow[u][i]-=k;
                flow[i][u]+=k;
                cost+=k;
                if(cost==limit)
                    break;
            }
            else
                d[i]=-1;
        }
        return cost;
    }
    int dinic (int mid) {
       int ans=0,i;
        memset(flow,0,sizeof(flow));
      for(i=1;i<=p;i++)
        if(mp[i].w<=mid) {
       flow[mp[i].u][mp[i].v]++;
       flow[mp[i].v][mp[i].u]++;
        }
       while(bfs())
        ans+=dfs(1,inf);
         if(ans>=t)
            return 1;
         return 0;
    }
    int main() {
          int i,min,max,mid;
          while(scanf("%d%d%d",&n,&p,&t)!=EOF) {
                min=inf;
          max=-1;
             for(i=1;i<=p;i++) {
                scanf("%d%d%d",&mp[i].u,&mp[i].v,&mp[i].w);
                if(mp[i].w>max)
                    max=mp[i].w;
                if(mp[i].w<min)
                    min=mp[i].w;
             }
              while(min<=max) {
                mid=(min+max)/2;
                if(dinic(mid))
                    max=mid-1;
                else
                    min=mid+1;
              }
              printf("%d ",min);
          }
    return 0;
    }
  • 相关阅读:
    ZF2系列 – Zend Framework 2 MVC實作 (Part 3)
    albumTable.php 加入checkreg和checklogin
    albumController.php 加入loginaction
    完美实现 ASP.NET 2.0 中的URL重写伪静态(映射)
    c#文件上传源代码
    收藏:ASP.NET正则表达式大全
    添加鼠标悬浮在控件上的提示信息 很齐全各种方法 MFC ToolTipCtl
    提交表单时执行func方法
    MFC程序设置自动启动,通过注册表实现(很详细的呃!)
    VC提供的Wizard生成的MFC App Wizard(exe)框架
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410805.html
Copyright © 2011-2022 走看看