题意:

第一行输入N M C ,表示从1到N有M条无向边,现在要从1走到N 走C次完全不同的路径,求最长边的最小值。下面M行是从a点到b点的距离。

建图:

题上说从两点之间可以有多条边,问的是从1~N的C种走法,所走路径上的最大边最小可以是多少,所以我们用结构体来储存点的距离,用二分搜索中的mid来假设成最大边的值,那么其他边都要小于等于它,然后根据mid建图,两点之间的边数作为容量网络的边权,也就是两点间的容量,(Dinic跑一遍)求出一个最大流,看它与C的关系,如果C大于它,说明mid太小,反之mid太大。

关于Dinic 和 优化·

首先通过广搜判断是否存在增广路,然后用深搜对地图进行操作,求最大流。深搜的时候有两个形参,一个是点的编号,另一个是由上一个点流过来的流量(具体见注释)

优化是先通过广搜的标记数组book[ ]的值,初始化为-1,大于等于0代表已经走过,不过标记的时候是

book[i]=book[k]+1(k走到 i),用于深搜的时候判断for循环中的顶点是否可走。在深搜的时候如果一个点没有网络流,就标记为-2或更小,下一次就不再在这个点搜了。(不优化则超时)

#include<queue>
#include<stdio.h>
#include<string.h>
using namespace std;
struct
{
int u,v,w;
}mp[40100];
int e[220][221],n,m,sign[220][220],mid,inf=0x3f3f3f3f;
int book[220];
int bfs()
{ memset(book,-1,sizeof(book));
memset(sign,0,sizeof(sign));
book[1]=0;
queue<int>q;
q.push(1);
while(!q.empty())
{
int k=q.front();
q.pop();
for(int i=1;i<=n;i++)
{
if(book[i]<0&&e[k][i]>0)//没有走过并且可以走
{
book[i]=book[k]+1;//从 k 点走过来 k->i
q.push(i);
}
}
}
if(book[n]>=0) return 1;
return 0;
}
void build()
{
memset(e,0,sizeof(e));
for(int i=0;i<m;i++)
if(mp[i].w<=mid)
{
e[mp[i].v][mp[i].u]++;
e[mp[i].u][mp[i].v]++;
}
}
int dfs(int v,int sum)
{
int t,s,i,use=0;
if(v==n)//找到终点 s=sum
return sum;
for(int i=1;i<=n;i++)
{
if(e[v][i]>0&&book[i]==book[v]+1)//v->i
{
t=dfs(i,min(sum,e[v][i]));//路径上最小的流
use+=t;//回溯时加减
e[v][i]-=t;
e[i][v]+=t;
sum-=t;
}
if(sum<=0)//如果sum小于零 不再递归
break;
}
if(!use)book[v]=-2;// 路径以后不再走 节点中没有网络流
return use;//返回最大流相当于s-sum
}
int main()
{
int c;
while(~scanf("%d%d%d",&n,&m,&c))
{
int t1,t2,t3,l=inf,r=-1;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&mp[i].u,&mp[i].v,&mp[i].w);
if(l>mp[i].w)//超时
l=mp[i].w;
if(r<mp[i].w)
r=mp[i].w;
}
while(l<r)
{
mid=(l+r)/2;
build();
int ans=0;
while(bfs()) ans+=dfs(1,inf);
if(ans>=c)
r=mid;
else
l=mid+1;
}
printf("%d\n",r);
}
return 0;
}

Secret Milking Machine POJ - 2455 网络流(Dinic算法---广搜判断+深搜增广)+时间优化+二分的更多相关文章

  1. POJ 3281 网络流dinic算法

    B - Dining Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

  2. POJ 3281 [网络流dinic算法模板]

    题意: 农场主有f种食物,d种饮料,n头牛. 接下来的n行每行第一个数代表第i头牛喜欢吃的食物数量,和第i头牛喜欢喝的饮料数目. 接下来分别是喜欢的食物和饮料的编号. 求解:农场主最多能保证几头牛同时 ...

  3. POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9658   Accepted: ...

  4. POJ 2455 Secret Milking Machine(最大流+二分)

    Description Farmer John is constructing a new milking machine and wishes to keep it secret as long a ...

  5. POJ 2455 网络流 基础题 二分+网络流 dicnic 以及 sap算法

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8189   Accepted: ...

  6. 【bzoj1733】[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 二分+网络流最大流

    题目描述 Farmer John is constructing a new milking machine and wishes to keep it secret as long as possi ...

  7. [bzoj1733][Usaco2005 feb]Secret Milking Machine 神秘的挤奶机_网络流

    [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 题目大意:约翰正在制造一台新型的挤奶机,但他不希望别人知道.他希望尽可能久地隐藏这个秘密.他把挤奶机藏在他的农 ...

  8. 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 ...

  9. POJ2455 Secret Milking Machine

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12324   Accepted ...

随机推荐

  1. css3动画属性有哪些

    transition :   平衡过渡 transition是一种css里的一种过渡效果,完成过渡需要多少秒 .延迟几秒开始 ,过渡的速度(一般有 "linear 匀速"  和“e ...

  2. 201771010105—达拉草 实验一 软件工程准备—<软件工程构建之法—初步了解和认识>

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  3. NS域名工作原理及解析

    DNS域名工作原理及解析   0x00 定义 DNS( Domain Name System)是“域名系统”的英文缩写,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.D ...

  4. py基础之有序列表

    L =['adam',95.5,'lisa',85,'bart','bart',59]print (L)#list是一种有序的列表,可以使用索引访问每个list中的值print (L[1])#list ...

  5. js笔记系列之--时间及时间戳

    js入门系列之 时间及时间戳 时间及时间戳 时间及时间戳是js里面很常见的一个概念,在我们写前端页面的时候,经常会遇到需要获取当前时间的情况,所以,了解js中的时间概念非常重要.而时间戳是指格林威治时 ...

  6. HTML5中form的新增属性或元素

    1.新增的表单元素 1.1 progress表示任务的完成情况,常用于进度条. max 定义进度元素所要求的任务的工作量,默认值为1 value 定义已经完成的工作量,如果max值为1,该值必须是介于 ...

  7. 鸟哥的Linux私房菜基础学习篇(第三版)——阅读笔记(二)

    第一章 Linux是什么 1.Linux是什么 一套操作系统 早期的Linux是针对386开发的 具有可移植性 2.Unix及Linux的发展史 1973年,Unix诞生,Ritchie等人以C语言写 ...

  8. xpath提取标签和内容

    转:https://segmentfault.com/q/1010000012110138/a-1020000012113020 <div> <table> <tr> ...

  9. 服务发现组件之 — Eureka

    前言 现在流行的微服务体系结构正在改变我们构建应用程序的方式,从单一的单体服务转变为越来越小的可单独部署的服务(称为微服务),共同构成了我们的应用程序.当进行一个业务时不可避免就会存在多个服务之间调用 ...

  10. 全球疫情统计APP图表形式展示

    全球疫情统计APP图表展示: 将该任务分解成三部分来逐个实现: ①爬取全球的疫情数据存储到云服务器的MySQL上 ②在web项目里添加一个servlet,通过参数的传递得到对应的json数据 ③设计A ...