博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2455 Secret Milking Machine【二分+最大流】
阅读量:5821 次
发布时间:2019-06-18

本文共 1548 字,大约阅读时间需要 5 分钟。

题意: 已知有 n 块地,和已经存在的 m 条路径,要求找出从第 1 块地到第 n 块地的 T条不同路径,且每条路径上的道路不能与之前的路径重复,求出满足要求的路径中最长的道路最短可以是多少。

分析: 二分答案,将满足条件的道路长度容量设为 1 ,求最大流,最大流即为路径的条数。

EK:

#include
#include
#include
#define INF 99999999#define maxn 230#define clr(x)memset(x,0,sizeof(x))#define min(a,b)(a)<(b)?(a):(b)int q[1000];int flow[maxn][maxn];int c[maxn][maxn];int a[maxn];int p[maxn];int s,t,tt,n,m;int E_K(){ clr(flow); clr(p); s=1; t=n; int maxflow=0; int u,v,front,rear; for(;;) { clr(a); a[s]=INF; front=rear=0; q[rear++]=s; while(front
flow[u][v])) { p[v]=u; q[rear++]=v; a[v]=min(a[u],c[u][v]-flow[u][v]); } } if(a[t]==0) break; for(u=t;u!=s;u=p[u]) { flow[p[u]][u]+=a[t]; flow[u][p[u]]-=a[t]; } maxflow+=a[t]; } return maxflow;}struct node{ int x,y,wi;}sc[410000];bool ok(int di){ int i; clr(c); for(i=0;i
=tt) return true; return false;}int main(){ int low,high,mid,i; while(scanf("%d%d%d",&n,&m,&tt)!=EOF) { low=0; high=0; clr(c); for(i=0;i
high) high=sc[i].wi; } int res; while(low<=high) { mid=(low+high)/2; if(ok(mid)) { high=mid-1; res=mid; } else low=mid+1; } printf("%d\n",res); } return 0;}

 

 

转载于:https://www.cnblogs.com/dream-wind/archive/2012/07/24/2606593.html

你可能感兴趣的文章
贪吃蛇
查看>>
EventSystem
查看>>
用WINSOCK API实现同步非阻塞方式的网络通讯
查看>>
玩一玩博客,嘿嘿
查看>>
P1352 没有上司的舞会
查看>>
ios11文件夹
查看>>
【HLOJ 559】好朋友的题
查看>>
Electric Fence(皮克定理)
查看>>
nvl 在mysql中如何处理
查看>>
MyEclipse 快捷键
查看>>
快速傅里叶变换FFT
查看>>
大数据常用基本算法
查看>>
JavaScript学习笔记(十三)——生成器(generator)
查看>>
hibernate保存失败
查看>>
MySQL增量订阅&消费组件Canal POC
查看>>
Sqlite多线程
查看>>
数据结构-时间复杂度
查看>>
对象与字符串相互转换
查看>>
[NOIp2017提高组]小凯的疑惑
查看>>
《C程序设计语言》练习1-5
查看>>