poj 3228(二分+最大流)
题目链接:http://poj.org/problem?id=3228
思路:增设一个超级源点和一个超级汇点,源点与每一个gold相连,容量为gold数量,汇点与仓库相连,容量为仓库的容量,然后就是二分最小的最大相邻距离,跑最大流验证即可。最大流用的是别人的Dinic模版。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 222
#define inf 1<<30 int vs,vt;
int dep[MAXN];
int map[MAXN][MAXN]; int gold[MAXN],store[MAXN];
int dist[MAXN][MAXN];
void Build_Map(int limit,int n)
{
memset(map,,sizeof(map));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(dist[i][j]<=limit)map[i][j]=inf;
for(int i=;i<=n;i++){
map[vs][i]=gold[i];
map[i][vt]=store[i];
}
} int BFS(){
queue<int> q;
while(!q.empty())
q.pop();
memset(dep,-,sizeof(dep));
dep[vs]=;
q.push(vs);
while(!q.empty()){
int u=q.front();
q.pop();
for(int v=vs;v<=vt;v++)
if(map[u][v]> && dep[v]==-){
dep[v]=dep[u]+;
q.push(v);
}
}
return dep[vt]!=-;
} int DFS(int u,int minx){
if(u==vt)
return minx;
int tmp;
for(int v=vs;v<=vt;v++)
if(map[u][v]> && dep[v]==dep[u]+ && (tmp=DFS(v,min(minx,map[u][v])))){
map[u][v]-=tmp;
map[v][u]+=tmp;
return tmp;
}
dep[u]=-;
return ;
} int Dinic(){
int ans=,tmp;
while(BFS()){
while(){
tmp=DFS(vs,inf);
if(tmp==)
break;
ans+=tmp;
}
}
return ans;
} int main()
{
int total,n,m,a,b,c;
while(~scanf("%d",&n)){
if(n==)break;
total=,vs=,vt=n+;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dist[i][j]=inf;
for(int i=;i<=n;i++){
scanf("%d",&gold[i]);
total+=gold[i];
}
for(int i=;i<=n;i++)scanf("%d",&store[i]);
scanf("%d",&m);
while(m--){
scanf("%d%d%d",&a,&b,&c);
dist[a][b]=dist[b][a]=c;
} int low=,high=,mid,ans=-;
while(low<=high){
mid=(low+high)>>;
Build_Map(mid,n);
if(Dinic()==total){
ans=mid;
high=mid-;
}else
low=mid+;
}
if(ans==-){
printf("No Solution\n");
}else
printf("%d\n",ans);
}
return ;
}
poj 3228(二分+最大流)的更多相关文章
- POJ 3228 二分最大流
题意: 给你N个位置,每个位置都有金矿数量和仓库数量,然后位置和位置之间的距离给了出来,最后问你吧所有的金矿都放到库里面走的路径 最长的最短 是多少? 思路: 比较简单的一个题, ...
- poj 2455 二分+最大流
这个因为点少用邻接矩阵做的. 题意:求由1到n的t条不重复路径中最大边权值的最小值. 思路:先对边权进行排序,然后二分边权值,建图求从1到n的最大流,当最大流为t时便求出答案. 代码: #includ ...
- 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 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的字段和 每个 ...
- HDU3081 Marriage Match II —— 传递闭包 + 二分图最大匹配 or 传递闭包 + 二分 + 最大流
题目链接:https://vjudge.net/problem/HDU-3081 Marriage Match II Time Limit: 2000/1000 MS (Java/Others) ...
- HDU-3081-Marriage Match II 二分图匹配+并查集 OR 二分+最大流
二分+最大流: 1 //题目大意:有编号为1~n的女生和1~n的男生配对 2 // 3 //首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 4 // 5 //然后输入f组,c,d表示 ...
随机推荐
- android开发图片分辨率问题解决方案
dpi是什么呢? dpi是“dot per inch”的缩写,每英寸像素数. 四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (ex ...
- 从零开始学ios开发(三):第一个有交互的app
感谢大家的关注,也给我一份动力,让我继续前进.有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12 ...
- [转]开源中国的 IT 公司开源软件整理计划介绍
[转]开源中国的 IT 公司开源软件整理计划介绍 http://www.oschina.net/news/61534/oschina-opensource-collection-plan-for-it ...
- java数据结构和算法------合并排序
package iYou.neugle.sort; public class Merge_sort { public static void MergeSort(double[] array, i ...
- 添加swap分区
1.创建swap文件,可以单独划分一个分区出来,也可以直接生成一个swap文件 dd if=/dev/zero of=swap bs=1M count=1024 2.格式化为swap文件 mkswap ...
- 利用Java实现表达式二叉树
(*^-^*) 什么是二叉树,这里不再介绍,可以自行百度:二叉树.在这里利用java实现“表达式二叉树”. 表达式二叉树的定义 第一步先要搞懂表达式二叉树是个什么东东?举个栗子,表达式:(a+b×(c ...
- Google Guava学习笔记——基础工具类String处理类的使用
不管你喜欢何种编程语言,很多时候针对string编程的处理都是乏味而且爱出错误的,很多时候,我们需要从文件或是数据库中读取数据,或者根据需求重新格式化或排序字符串给用户显示.幸运的是,Guava提供了 ...
- WPS for ubuntu14
QGtkStyle could not resolve GTK. Make sure you have installed the proper libraries. sudo apt-get ins ...
- 【BZOJ】【1798】【AHOI2009】Seq维护序列
线段树 属于线段树中级应用吧…… 要打两种标记:乘法和加法标记.一开始我想着可以像只有加法标记那样,永不下传,查询的时候依次累加就好了.后来发现不会写……只好每次update的时候……遇到标记!下传! ...
- BackgroundWorker
Constants.Worker = new BackgroundWorker(); Constants.Worker.WorkerSupportsCancellation = true; Const ...