【bzoj1733】[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 二分+网络流最大流
题目描述
Farmer John is constructing a new milking machine and wishes to keep it secret as long as possible. He has hidden in it deep within his farm and needs to be able to get to the machine without being detected. He must make a total of T (1 <= T <= 200) trips to the machine during its construction. He has a secret tunnel that he uses only for the return trips. The farm comprises N (2 <= N <= 200) landmarks (numbered 1..N) connected by P (1 <= P <= 40,000) bidirectional trails (numbered 1..P) and with a positive length that does not exceed 1,000,000. Multiple trails might join a pair of landmarks. To minimize his chances of detection, FJ knows he cannot use any trail on the farm more than once and that he should try to use the shortest trails. Help FJ get from the barn (landmark 1) to the secret milking machine (landmark N) a total of T times. Find the minimum possible length of the longest single trail that he will have to use, subject to the constraint that he use no trail more than once. (Note well: The goal is to minimize the length of the longest trail, not the sum of the trail lengths.) It is guaranteed that FJ can make all T trips without reusing a trail.
输入
* Line 1: Three space-separated integers: N, P, and T * Lines 2..P+1: Line i+1 contains three space-separated integers, A_i, B_i, and L_i, indicating that a trail connects landmark A_i to landmark B_i with length L_i.
输出
* Line 1: A single integer that is the minimum possible length of the longest segment of Farmer John's route.
样例输入
7 9 2
1 2 2
2 3 5
3 7 5
1 4 1
4 3 1
4 5 7
5 7 1
1 6 3
6 7 3
样例输出
5
题解
二分+网络流最大流
显然最大长度满足二分性质,我们可以二分长度mid,这样只能选择长度小于等于mid的边来走。
然后由于题目限制了每条边只能走一次,要求1到n的路径数,显然这是一个最大流问题。
对于原图中的边x->y,长度为z,如果z<=mid,则连边x->y,容量为1;否则不连边。
然后跑最大流,判断是否大于等于T即可,并对应调整上下界。
说实话这道网络流真是再水不过了。
- #include <cstdio>
- #include <cstring>
- #include <queue>
- #define N 210
- #define M 40010
- using namespace std;
- queue<int> q;
- int n , m , p , x[M] , y[M] , z[M] , head[N] , to[M << 2] , val[M << 2] , next[M << 2] , cnt , s , t , dis[N];
- void add(int x , int y , int z)
- {
- to[++cnt] = y , val[cnt] = z , next[cnt] = head[x] , head[x] = cnt;
- to[++cnt] = x , val[cnt] = 0 , next[cnt] = head[y] , head[y] = cnt;
- }
- bool bfs()
- {
- int x , i;
- memset(dis , 0 , sizeof(dis));
- while(!q.empty()) q.pop();
- dis[s] = 1 , q.push(s);
- while(!q.empty())
- {
- x = q.front() , q.pop();
- for(i = head[x] ; i ; i = next[i])
- {
- if(val[i] && !dis[to[i]])
- {
- dis[to[i]] = dis[x] + 1;
- if(to[i] == t) return 1;
- q.push(to[i]);
- }
- }
- }
- return 0;
- }
- int dinic(int x , int low)
- {
- if(x == t) return low;
- int temp = low , i , k;
- for(i = head[x] ; i ; i = next[i])
- {
- if(val[i] && dis[to[i]] == dis[x] + 1)
- {
- k = dinic(to[i] , min(temp , val[i]));
- if(!k) dis[to[i]] = 0;
- val[i] -= k , val[i ^ 1] += k;
- if(!(temp -= k)) break;
- }
- }
- return low - temp;
- }
- bool judge(int mid)
- {
- int i , ans = 0;
- memset(head , 0 , sizeof(head)) , cnt = 1;
- for(i = 1 ; i <= m ; i ++ )
- if(z[i] <= mid)
- add(x[i] , y[i] , 1) , add(y[i] , x[i] , 1);
- while(bfs()) ans += dinic(s , 0x7fffffff);
- return ans >= p;
- }
- int main()
- {
- int i , l = 0 , r = 0 , mid , ans = -1;
- scanf("%d%d%d" , &n , &m , &p) , s = 1 , t = n;
- for(i = 1 ; i <= m ; i ++ ) scanf("%d%d%d" , &x[i] , &y[i] , &z[i]) , r = max(r , z[i]);
- while(l <= r)
- {
- mid = (l + r) >> 1;
- if(judge(mid)) ans = mid , r = mid - 1;
- else l = mid + 1;
- }
- printf("%d\n" , ans);
- return 0;
- }
【bzoj1733】[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 二分+网络流最大流的更多相关文章
- [bzoj1733][Usaco2005 feb]Secret Milking Machine 神秘的挤奶机_网络流
[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 题目大意:约翰正在制造一台新型的挤奶机,但他不希望别人知道.他希望尽可能久地隐藏这个秘密.他把挤奶机藏在他的农 ...
- BZOJ1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机
n<=200个点m<=40000条边无向图,求 t次走不经过同条边的路径从1到n的经过的边的最大值 的最小值. 最大值最小--二分,t次不重边路径--边权1的最大流. #inclu ...
- 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 ...
- BZOJ 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机
Description 约翰正在制造一台新型的挤奶机,但他不希望别人知道.他希望尽可能久地隐藏这个秘密.他把挤奶机藏在他的农场里,使它不被发现.在挤奶机制造的过程中,他需要去挤奶机所在的地方T(1≤T ...
- [BZOJ 1733] [Usaco2005 feb] Secret Milking Machine 【二分 + 最大流】
题目链接:BZOJ - 1733 题目分析 直接二分这个最大边的边权,然后用最大流判断是否可以有 T 的流量. 代码 #include <iostream> #include <cs ...
- 【bzoj1738】[Usaco2005 mar]Ombrophobic Bovines 发抖的牛 Floyd+二分+网络流最大流
题目描述 FJ's cows really hate getting wet so much that the mere thought of getting caught in the rain m ...
- 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 ...
随机推荐
- phar打包项目压力对比测试
工具 http_load 测试url: http://api.test.chaoma.me/agent/ad/good_goods/query http://api.test.chaoma.me/ag ...
- idea存留
1.导师匿名评价系统 类似看准网 2.在线降重软件 基于翻译api,或者后期写算法 在线查重导流 公众号: e搜罗
- event loop、进程和线程、任务队列
本文原链接:https://cloud.tencent.com/developer/article/1106531 https://cloud.tencent.com/developer/articl ...
- Android开发出现 StackOverflowError
问题:StackOverflowError 在HTC或者摩托罗拉的手机上测试出现 StackOverflowError 的错误. 06-12 10:28:31.750: E/AndroidRuntim ...
- python判断平衡二叉树
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树.若左右子树深度差不超过1则为一颗平衡二叉树. 思路: 使用获取二叉树深度的方法来获取左右子树的深度 左右深度相减,若大于1返回False 通过递归对 ...
- Bootstrap历练实例:动画的进度条
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Linux运维笔记--第四部
第四部 3. Linux扩展正则表达式实战 扩展的正则表达式:ERE(主要用于egrep或grep -E) + 重复一个或一个以上前面的字符. (*是0或多个) ? 重复0个或一个 ...
- 转 Hystrix入门指南 Introduction
https://www.cnblogs.com/gaoyanqing/p/7470085.html
- centos7重启后/etc/resolv.conf 被还原解决办法
每次重启服务器后,/etc/resolv.conf文件就被自动还原了,最后发现是被Network Manager修改了. 查看Network Manager服务状态 systemctl status ...
- mybatis枚举类型处理器
1. 定义枚举值的接口 public abstract interface ValuedEnum { int getValue(); } 所有要被mybatis处理的枚举类继承该接口 2. 定义枚举类 ...