BZOJ 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机
Description
约翰正在制造一台新型的挤奶机,但他不希望别人知道.他希望尽可能久地隐藏这个秘密.他把挤奶机藏在他的农场里,使它不被发现.在挤奶机制造的过程中,他需要去挤奶机所在的地方T(1≤T≤200)次.他的农场里有秘密的地道,但约翰只在返回的时候用它.农场被划分成N(2≤N≤200)块区域,用1到200标号.这些区域被P(1≤P≤40000)条道路连接,每条路有一个小于10^6的长度L.两块区域之间可能有多条道路连接.为了减少被发现的可能,约翰不会两次经过农场上的任何一条道路.当然了,他希望走最短的路. 请帮助约翰寻找这T次从仓库走到挤奶机所在地的路线.仓库是区域1,挤奶机所在地是区域N.我们现在要求的是约翰经过的这些道路中最长的路的长度最小是多少,当然他不能重复走某一条路.请注意,我们要求的不是最短的总路程长度,而是所经过的直揍连接两个区域的道路中最长的道路的最小长度. 数据保证约翰可以找到T条没有重复的从仓库到挤奶机所在区域的路.
Input
第1行是3个整数N、P和T,用空格隔开.
第2到P+1行,每行包括3个整数,Ai,Bi,Li.表示区域Ai、Bi之间有一条长度为Li的道路.
Output
输出只有一行,包含一个整数,即约翰经过的这些道路中最长的路的最小长度.
题解:
二分一个ans,网络流判断能不能到>=T次。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
// by zrt
// problem:
// 无论你在什么时候开始,重要的是开始以后就不要停止。
using namespace std ;
typedef long long LL ;
const double eps(1e-10) ;
const int inf(0x3f3f3f3f) ;
int n,m,t;
int S,T;
struct N{
int x,w;
N(int a=0,int b=0){
x=a,w=b;
}
};
vector<N> v[205];
int H[205],X[80005],P[80005],tot,flow[80005];
inline void add(int x,int y,int z){
P[++tot]=y;X[tot]=H[x];H[x]=tot;flow[tot]=z;
}
int d[205];
queue<int> q;
bool bfs(){
memset(d,0,sizeof d);
d[S]=1;q.push(S);
while(!q.empty()){
int x=q.front();q.pop();
for(int i=H[x];i;i=X[i]){
if(flow[i]>0&&!d[P[i]]){
d[P[i]]=d[x]+1;
q.push(P[i]);
}
}
}
return d[T];
}
int dfs(int x,int a){
int f=a,tmp;
if(x==T||a==0) return a;
for(int i=H[x];i;i=X[i]){
if(flow[i]>0&&d[P[i]]==d[x]+1){
tmp=dfs(P[i],min(a,flow[i]));
a-=tmp;
flow[i]-=tmp;
flow[i^1]+=tmp;
if(!a) break;
}
}
if(f==a) d[x]=-1;
// printf("%d\n",f-a);
return f-a;
}
int Dinic(){
int f=0;
while(f<=t&&bfs()) f+=dfs(S,t);
return f;
}
bool judge(int lim){
tot=1;
memset(H,0,sizeof H);
for(int i=1;i<=n;i++){
for(int j=0;j<v[i].size();j++){
if(v[i][j].w<=lim){
add(i,v[i][j].x,1);
add(v[i][j].x,i,1);
}
}
}
if(Dinic()>=t) return 1;
else return 0;
}
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin) ;
freopen("out.txt","w",stdout) ;
#endif
scanf("%d%d%d",&n,&m,&t);
S=1,T=n;
int l=0,r=1e6+1,M;
for(int i=0,x,y,z;i<m;i++){
scanf("%d%d%d",&x,&y,&z);
v[x].push_back(N(y,z));
}
while(r-l>1){
M=(l+r)>>1;
if(judge(M)){
r=M;
}else l=M;
}
printf("%d\n",r);
return 0 ;
}
BZOJ 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机的更多相关文章
- BZOJ 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 网络流 + 二分答案
Description Farmer John is constructing a new milking machine and wishes to keep it secret as long a ...
- [bzoj1733][Usaco2005 feb]Secret Milking Machine 神秘的挤奶机_网络流
[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 题目大意:约翰正在制造一台新型的挤奶机,但他不希望别人知道.他希望尽可能久地隐藏这个秘密.他把挤奶机藏在他的农 ...
- 【bzoj1733】[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 二分+网络流最大流
题目描述 Farmer John is constructing a new milking machine and wishes to keep it secret as long as possi ...
- [BZOJ 1733] [Usaco2005 feb] Secret Milking Machine 【二分 + 最大流】
题目链接:BZOJ - 1733 题目分析 直接二分这个最大边的边权,然后用最大流判断是否可以有 T 的流量. 代码 #include <iostream> #include <cs ...
- BZOJ1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机
n<=200个点m<=40000条边无向图,求 t次走不经过同条边的路径从1到n的经过的边的最大值 的最小值. 最大值最小--二分,t次不重边路径--边权1的最大流. #inclu ...
- POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9658 Accepted: ...
- POJ2455 Secret Milking Machine
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12324 Accepted ...
- POJ 2455 Secret Milking Machine(最大流+二分)
Description Farmer John is constructing a new milking machine and wishes to keep it secret as long a ...
- BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )
最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...
随机推荐
- 关于Eclipse中的一些基本知识
Eclipse中寻找JRE的顺序是:vm参数指定的JRE--->elipse目录下的JRE--->操作系统中默认的JRE,利用这个特性也可以用vm参数来解决当本机安装有多个JRE的情况. ...
- CSS 수직 가운데 정렬 (테이블 없이!) Vertical Centering with CSS
이 방법은 테이블처럼 만들어서 테이블의 vertical-align 속성을 사용할 수 있도록 를 몇 개 세팅한다. (테이블의 vertical-align 속성은 다른 요소들에서는 굉장 ...
- Java简单算法--求100以内素数
package cn.magicdu.algorithm; /** * 打印素数 * * @author xiaoduc * */ public class Prim { public static ...
- gwt-问题解决
最近在看gwt,写了个demo,但是总是出问题,困扰了好几天,后台也没报错,但就是加载不出来 第一次编译以后是可以的,但是改了代码后就不行了,后台也没报错,google了好长时间也没出来. 于是换了个 ...
- content = "IE=edge,chrome=1" 详解
content = "IE=edge,chrome=1" 详解 < meta http-equiv = "X-UA-Compatible" content ...
- ArryList vs LinkedList
references: http://www.javaperformancetuning.com/articles/randomaccess.shtml http://stackoverflow.co ...
- ###《More Effective C++》- 基础议题
More Effective C++ #@author: gr #@date: 2015-05-11 #@email: forgerui@gmail.com 一.仔细区别pointers和refere ...
- ### Theano
Theano. #@author: gr #@date: 2014-07-02 #@email: forgerui@gmail.com 一.安装Theano ubuntu下安装相对简单. 安装依赖: ...
- 06_例子讲解:rlPlanDemo
规划器的例子程序: "E:\Program Files (x86)\rl-0.6.2\bin\rlPlanDemo.exe" "E:\Program Files (x86 ...
- Word 2010巧妙绘制各种分割线的方法(图文)
引用: 使用Word编辑文档时,可能为了使某些内容醒目显示,或者为了使文档内容显示的更美观.更有层次感,需要为文档添加一些分割线,如添加下框线.插入水平线.使用特殊符号快速绘制分割线等等.在Word ...