poj 2455 二分+最大流
这个因为点少用邻接矩阵做的。
题意:求由1到n的t条不重复路径中最大边权值的最小值。
思路:先对边权进行排序,然后二分边权值,建图求从1到n的最大流,当最大流为t时便求出答案。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 210
int n,m,t;
int a,b,c;
int map[210][210];
struct Edge
{
int u,v,w;
}edge[40001];
bool cmp(Edge a,Edge b)
{
return a.w<b.w;
}
int sap()
{
int pre[N],dis[N],gap[N],aug=-1,maxflow=0,u;
int s=1,t=n;
memset(gap,0,sizeof(gap));
memset(dis,0,sizeof(dis));
u=pre[s]=s;
gap[0]=t;
while(dis[s]<t)
{
loop:for(int i=1;i<=t;i++)
{
if(map[u][i]&&dis[u]==dis[i]+1)
{
if(aug==-1||aug>map[u][i])
aug=map[u][i];
pre[i]=u;
u=i;
if(u==t)
{
maxflow+=aug;
for(int v=t;v!=s;v=pre[v])
{
map[pre[v]][v]-=aug;
map[v][pre[v]]+=aug;
}
aug=-1;
u=s;
}
goto loop;
}
}
int mindis=t-1;
for(int i=1;i<=t;i++)
if(map[u][i]&&dis[i]<mindis)
mindis=dis[i];
if((--gap[dis[u]])==0) break;
gap[dis[u]=mindis+1]++;
u=pre[u];
}
return maxflow;
}
void build(int x)
{
memset(map,0,sizeof(map));
for(int i=0;i<=x;i++)
{
int u,v;
u=edge[i].u;
v=edge[i].v;
map[u][v]++;
map[v][u]++;
}
}
bool check(int x)
{
build(x);
int maxflow=sap();
if(maxflow>=t)
{
return true;
}
return false;
} int main()
{
while(scanf("%d%d%d",&n,&m,&t)!=EOF)
{
memset(edge,0,sizeof(edge));
memset(map,0,sizeof(map));
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
edge[i].u=a;
edge[i].v=b;
edge[i].w=c;
}
sort(edge,edge+m,cmp);
int l=0,r=m-1;
while(r>=l)
{
int mid=(l+r)>>1;
if(check(mid))
{
r=mid-1;
}
else l=mid+1;
}
printf("%d\n",edge[r+1].w);
}
}
poj 2455 二分+最大流的更多相关文章
- poj 3228(二分+最大流)
题目链接:http://poj.org/problem?id=3228 思路:增设一个超级源点和一个超级汇点,源点与每一个gold相连,容量为gold数量,汇点与仓库相连,容量为仓库的容量,然后就是二 ...
- POJ 2112 二分+最大流
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 17297 Accepted: 6203 ...
- POJ 2391 二分+最大流
Ombrophobic Bovines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19066 Accepted: 4 ...
- POJ 3228 二分最大流
题意: 给你N个位置,每个位置都有金矿数量和仓库数量,然后位置和位置之间的距离给了出来,最后问你吧所有的金矿都放到库里面走的路径 最长的最短 是多少? 思路: 比较简单的一个题, ...
- POJ 2455 二分+网络流
题意: 思路: 莫名其妙TLE 啊woc我A了一坨题的网络流模板有问题 !!!! 在常数上会慢 (一个等于号 啊啊啊) 改了所有网络流有关的文章- .... //By SiriusRen #inclu ...
- POJ 2455 Secret Milking Machine (二分 + 最大流)
题目大意: 给出一张无向图,找出T条从1..N的路径,互不重复,求走过的所有边中的最大值最小是多少. 算法讨论: 首先最大值最小就提醒我们用二分,每次二分一个最大值,然后重新构图,把那些边权符合要求的 ...
- poj 2391 Ombrophobic Bovines 最短路 二分 最大流 拆点
题目链接 题意 有\(n\)个牛棚,每个牛棚初始有\(a_i\)头牛,最后能容纳\(b_i\)头牛.有\(m\)条道路,边权为走这段路所需花费的时间.问最少需要多少时间能让所有的牛都有牛棚可待? 思路 ...
- uvalive 3231 Fair Share 公平分配问题 二分+最大流 右边最多流量的结点流量尽量少。
/** 题目: uvalive 3231 Fair Share 公平分配问题 链接:https://vjudge.net/problem/UVALive-3231 题意:有m个任务,n个处理器,每个任 ...
- POJ - 2018 二分+单调子段和
依然是学习分析方法的一道题 求一个长度为n的序列中的一个平均值最大且长度不小于L的子段,输出最大平均值 最值问题可二分,从而转变为判定性问题:是否存在长度大于等于L且平均值大于等于mid的字段和 每个 ...
随机推荐
- Linux(2)文件和权限
用户目录 位于/home/user, 称为用户目录或家目录, 表示方法: /home/user ~ 相对路径和绝对路径 绝对路径 从 / 目录开始描述的路径外绝对路径 cd /home cd /usr ...
- Android Studio 或 IntelliJ IDEA获取数字签名的方法
原先在 Eclipse中 数字签名(SHA1或MD5)的获取方法 为: 点击 Eclipse导航栏的Windows --> Preference --> Android --> Bu ...
- C#快速入门
一.简介 1.C#是由Anders Hejlsberg和他的团队在.Net框架开发期间开发的:是.Net框架的一部分. C#是专为公共语言基础结构(CLI)设计的,CLI由可执行代码和运行时环境组成, ...
- C++中加const与不加const的区别
“常量”与“只读变量”的区别. 常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它. “只读变量”则是在内存中 ...
- ORACLE索引监控的简单使用
--ORACLE索引监控的简单使用-------------------------2013/11/20 说明: 应用程序在开发时,可能会建立众多索引,但是这些索引的使用到底怎么样,是否有些索 ...
- 研究分析JS中的三种逻辑语句
JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10; ...
- ExtJs 思维导图
搭建环境: 1. 建tomcat , eclipse2. 复制 Extjs 到 项目的 webcontent下 (建议用自己一个熟悉的Extjs版本,我用Ext JS 4.2), 备份一个ext目录, ...
- leetcode First Bad Version(二分查找)
You are a product manager and currently leading a team to develop a new product. Unfortunately, the ...
- javascript如何创建一个换行节点
换行节点和其他节点的创建方式一样,使用document.createElement("br");创建节点, 并使用parentNode.appendChild()将节点插入到相应的 ...
- 使用EasyWechat快速开发微信支付
前期准备: 申请微信支付后, 会收到2个参数, 商户id,和商户key.注意,这2个参数,不要和微信的参数混淆.微信参数: appid, appkey, token支付参数: merchant_id( ...