POJ 2455 Secret Milking Machine(最大流+二分)
Description
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.
Input
* 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.
Output
- #include <cstdio>
- #include <cstring>
- #include <queue>
- using namespace std;
- const int MAXN = 210;
- const int MAXE = 40010 * 2;
- const int INF = 0x7f7f7f7f;
- struct Dinic {
- int n, m, st, ed, ecnt, maxlen;
- int head[MAXN];
- int cur[MAXN], d[MAXN];
- int to[MAXE], next[MAXE], flow[MAXE], cap[MAXE], len[MAXE];
- void init(int ss, int tt) {
- st = ss; ed = tt;
- ecnt = 2;
- memset(head, 0, sizeof(head));
- }
- void add_edge(int u, int v, int c, int l) {
- len[ecnt] = l; to[ecnt] = v; cap[ecnt] = c; flow[ecnt] = 0; next[ecnt] = head[u]; head[u] = ecnt++;
- len[ecnt] = l; to[ecnt] = u; cap[ecnt] = c; flow[ecnt] = 0; next[ecnt] = head[v]; head[v] = ecnt++;
- }
- bool bfs() {
- memset(d, 0, sizeof(d));
- queue<int> que; que.push(st);
- d[st] = 1;
- while(!que.empty()) {
- int u = que.front(); que.pop();
- for(int p = head[u]; p; p = next[p]) {
- if(len[p] > maxlen) continue;
- int v = to[p];
- if(!d[v] && cap[p] > flow[p]) {
- d[v] = d[u] + 1;
- que.push(v);
- if(v == ed) return true;
- }
- }
- }
- return d[ed];
- }
- int dfs(int u, int a) {
- if(u == ed || a == 0) return a;
- int outflow = 0, f;
- for(int &p = cur[u]; p; p = next[p]) {
- if(len[p] > maxlen) continue;
- int v = to[p];
- if(d[u] + 1 == d[v] && (f = dfs(v, min(a, cap[p] - flow[p]))) > 0) {
- flow[p] += f;
- flow[p ^ 1] -= f;
- outflow += f;
- a -= f;
- if(a == 0) break;
- }
- }
- return outflow;
- }
- int Maxflow(int mlen) {
- int ans = 0; maxlen = mlen;
- while(bfs()) {
- for(int i = 0; i <= ed; ++i) cur[i] = head[i];
- ans += dfs(st, INF);
- }
- return ans;
- }
- } G;
- int main() {
- int n, m, T, left = 0, right = 0;
- scanf("%d%d%d", &n, &m, &T);
- G.init(1, n);
- for(int i = 0; i < m; ++i) {
- int a, b, c;
- scanf("%d%d%d", &a, &b, &c);
- G.add_edge(a, b, 1, c);
- if(right < c) right = c;
- }
- while(left < right) {
- memset(G.flow, 0, sizeof(G.flow));
- int mid = (left + right) >> 1;
- if(G.Maxflow(mid) < T) left = mid + 1;
- else right = mid;
- }
- printf("%d\n", right);
- }
POJ 2455 Secret Milking Machine(最大流+二分)的更多相关文章
- POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9658 Accepted: ...
- POJ 2455 Secret Milking Machine (二分 + 最大流)
题目大意: 给出一张无向图,找出T条从1..N的路径,互不重复,求走过的所有边中的最大值最小是多少. 算法讨论: 首先最大值最小就提醒我们用二分,每次二分一个最大值,然后重新构图,把那些边权符合要求的 ...
- poj 2455 Secret Milking Machine 二分+最大流 sap
题目:p条路,连接n个节点,现在需要从节点1到节点n,不重复走过一条路且走t次,最小化这t次中连接两个节点最长的那条路的值. 分析:二分答案,对于<=二分的值的边建边,跑一次最大流即可. #in ...
- POJ 2455 Secret Milking Machine 【二分】+【最大流】
<题目链接> 题目大意: FJ有N块地,这些地之间有P条双向路,每条路的都有固定的长度l.现在要你找出从第1块地到第n块地的T条不同路径,每条路径上的路段不能与先前的路径重复,问这些路径中 ...
- POJ 2455 Secret Milking Machine (二分+无向图最大流)
[题意]n个点的一个无向图,在保证存在T条从1到n的不重复路径(任意一条边都不能重复)的前提下,要使得这t条路上经过的最长路径最短. 之所以把"经过的最长路径最短"划个重点是因为前 ...
- POJ 2455 - Secret Milking Machine
原题地址:http://poj.org/problem?id=2455 题目大意:给出一个N个点的无向图,中间有P条边,要求找出从1到n的T条通路,满足它们之间没有公共边,并使得这些通路中经过的最长的 ...
- POJ Secret Milking Machine 【网络流+二分】
题意:各一个地图,两点之间有若干条路,要在节点1和节点n之间行走t次(就是问1到n的路径数至少为t,每一条路径不能有重复),问所有路径里面最长的部分(这个题目特别强调,不是路径长度和,是路径中相邻两点 ...
- 【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 神秘的挤奶机 网络流 + 二分答案
Description Farmer John is constructing a new milking machine and wishes to keep it secret as long a ...
随机推荐
- mongo配置项说明
mongo configure 配置文件 storage: dbPath: mongod实例存储其数据的目录. indexBuildRetry: 指定是否mongod在下次启动时重 ...
- 走进MySQL
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...
- bootstrap-01-学习记录
1.bootstrap所有插件依赖JQ,必须在JQ之后引入. 2.bootstrap分预编译版(css,js,fonts)和源码版(less,js,fonts,dist->预编译版内容,docs ...
- h5图片上传简易版(FileReader+FormData+ajax)
一.选择图片(input的file类型) <input type="file" id="inputImg"> 1. input的file类型会渲染为 ...
- Hadoop mapreduce框架简介
传统hadoop MapReduce架构(老架构) 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 1.首先用户程序 (JobClient) 提交了一个 job,job ...
- 基于C语言的面向对象编程
嵌入式软件开发中,虽然很多的开发工具已经支持C++的开发,但是因为有时考虑运行效率和编程习惯,还是有很多人喜欢用C来开发嵌入式软件.Miro Samek说:"我在开发现场发现,很多嵌入式软件 ...
- 找球号(三)南阳acm528(异或' ^ ')
找球号(三) 时间限制:2000 ms | 内存限制:10000 KB 难度:2 描述 xiaod现在正在某个球场负责网球的管理工作.为了方便管理,他把每个球都编了号,且每个编号的球的总个数都 ...
- 创建IDataProvider实例
using System; namespace Demo.Data{ public class DatabaseProvider { private static IDataProvider _ins ...
- CSS基础part2
CSS属性操作-文本 文本颜色 <head> <style> p{ /*color:#8B5742 ;色码表*/ color: RGBA(255,0,0,0.5); /*调色, ...
- 【转】Odoo 学习之:constrains装饰
constrains装饰用于对字段进行限制 应用举例: 定义列: age = fields.Integer(string="age") 方法: @api.constrains('a ...