Optimal Milking

//二分枚举最大距离的最小值+Floyd找到最短路+Dinic算法
//参考图论算法书,并对BFS构建层次网络算法进行改进
//Time:157Ms Memory:652K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std; #define MAX 250
#define INF 0x3f3f3f3f int K, C, M;
int s, t;
int d[MAX][MAX]; //各点间最短距离
int res[MAX][MAX]; //残留网络
int lev[MAX]; void build_map(int limit)
{
memset(res,0,sizeof(res));
for (int i = K + 1; i <= K + C; i++)
res[s][i] = 1;
for (int i = 1; i <= K; i++)
res[i][t] = M;
for (int i = K + 1; i <= K + C; i++)
for (int j = 1; j <= K; j++)
if (d[i][j] <= limit) res[i][j] = 1;
} bool bfs() //BFS标记层次网络
{
memset(lev, -1, sizeof(lev));
queue<int> q;
q.push(s);
lev[s] = 0;
while (!q.empty()) { //构建层次网络
int cur = q.front();
q.pop();
for(int i = 1; i <= t; i++)
{
if(lev[i] == -1 && res[cur][i]) //未访问且正向有流量
{
q.push(i);
lev[i] = lev[cur] + 1;
}
}
}
return lev[t] != -1;
} int dfs(int v, int alpha) //DFS进行多次增广
{
if(v == t || alpha == 0) return alpha;
int src = alpha; //原可改进量
for(int i = 1; i <= t; i++)
{
if(res[v][i] && lev[i] == lev[v] + 1){ //识别下一层次
int tmp = dfs(i, min(alpha, res[v][i]));
res[v][i] -= tmp;
res[i][v] += tmp;
alpha -= tmp; //可改进量减少
}
}
return src - alpha; //总改进量
} int main()
{
//freopen("in.txt", "r", stdin); scanf("%d%d%d", &K,&C,&M);
s = 0; t = K + C + 1; //源点-汇点
for (int i = 1; i < t; i++)
for (int j = 1; j < t; j++)
{
scanf("%d", &d[i][j]);
if (d[i][j] == 0) d[i][j] = INF;
} for (int k = 1; k < t; k++)
for (int i = 1; i < t; i++)
{
if (d[i][k] != INF) {
for (int j = 1; j < t; j++)
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
} s = 0; t = K + C + 1; //源点 汇点
int l = 0, r = 9000;
while (l < r)
{
int ans = 0; //到达目的地的奶牛数量
int mid = (l + r) / 2;
build_map(mid);
while (bfs())
ans += dfs(0,INF); //第二参数指定该点可改进量
ans == C ? r = mid: l = mid+1;
}
printf("%d\n", r); return 0;
}

ACM/ICPC 之 Dinic算法(POJ2112)的更多相关文章

  1. ACM/ICPC 之 Dinic+枚举最小割点集(可做模板)(POJ1815)

    最小割的好题,可用作模板. //Dinic+枚举字典序最小的最小割点集 //Time:1032Ms Memory:1492K #include<iostream> #include< ...

  2. ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)

    第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...

  3. ACM - ICPC World Finals 2013 C Surely You Congest

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...

  4. 2017 ACM/ICPC Asia Regional Qingdao Online

    Apple Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submi ...

  5. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  6. 【转】ACM/ICPC生涯总结暨退役宣言—alpc55

    转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...

  7. hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  8. HDU 1532 (Dinic算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目大意: 就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络 ...

  9. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

随机推荐

  1. linux-windows资源共享

    先安装samba,然后 sudo mount -t cifs //192.168.1.111/Jack_Win_Share /media/ -o username=Jack,password=1,io ...

  2. ReactNative新手学习之路07ListView_ renderHeader使用StaticContainer

    react native新手学习之路07ListView_ renderHeader使用StaticContainer 1.某些特殊场景需要用ScrollView滚动和ListView配合但是不幸运的 ...

  3. 2016-2017-2 《Java程序设计》预备作业2总结

    2016-2017-2 <Java程序设计>预备作业2总结 古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把.」 在对计算机系的学生情况的调查中,我说: 最近 ...

  4. shiro登陆后没有返回设置的successUrl?

    第一次学习shiro的时候,并没有发现很大的问题.但后来在做项目的时候,特别是当访问的url是iframe的页面的时候,session又过期了,跳转到登陆页,完成登陆操作后,返回了只有iframe的页 ...

  5. bzoj 3055礼物运送 floyed + 状压DP

    bzoj 3055: 礼物运送 floyed first 设f[i][S]表示取到了S集合中的所有点(不一定是经过的所有点),最后停在了i的最优值. 初始就f[i][{i}] = dis[1][i] ...

  6. 正则表达式解析url参数

    解析url参数正则:(?<=\?|&)[\w\={}\\\\,-:'\s'""]*(?=[^#\s]|) 意思是(?<=\?|&) 从?或&符号 ...

  7. Java基础-一个java文件多个类的问题

    一个.java文件当然可以包括多个类.但这些类有一个特殊的类与其它的不同,,这个类是带public 属性的类.一个.java类文件中仅有一个public属性的类.而且这个类与文件名相同.

  8. nginx + mysql + php相关源码包及安装

    nginx + mysql + php安装 引言 完整的搭建一个nginx+php-fpm+mysql的服务器,一直是我向做的,不过一致没有完成过,这次工作需要,终于安装成功了 我列出了我遇到的一些问 ...

  9. linux 下载百度盘,迅雷离线文件,解压乱码文件的方法。

    首先,利用bypy的自动打包功能,将百度盘里的文件自动存放至app/bypy中,这样文件就是打包形式. 再利用 axel -n 10 "下载地址",将文件下载至本地. 下载地址获取 ...

  10. ypzl药品质量不合格数据库-excel自动排版

    原创: qq:231469242 import xlrdimport pandas,numpyimport matplotlib.pyplot as pltimport pandas as pd #参 ...