POJ 2391 Floyd+二分+拆点最大流
题意:
思路:
先Floyd一遍两两点之间的最短路 二分答案
建图
跑Dinic
只要不像我一样作死#define int long long 估计都没啥事……
我T到死辣……..
最后才改过来……
(不过注意一哈 答案 &最短路确实是会爆int的)
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 667
int f,m,xx,yy,cow[222],cap[222],zz,all;
long long map[222][222],maxx;
struct Dinic{
int first[N],next[N*1000],v[N*1000],tot,vis[N],w[N*1000],q[N*1000],head,tail;
void init(){
memset(first,-1,sizeof(first)),tot=0;
}
void add(int x,int y,int z){
w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;
w[tot]=0,v[tot]=x,next[tot]=first[y],first[y]=tot++;
}
bool tell(){
head=0,tail=1;
memset(vis,-1,sizeof(vis));
vis[0]=0,q[0]=0;
while(head<tail){
int t=q[head++];
for(int i=first[t];~i;i=next[i])
if(vis[v[i]]==-1&&w[i])
vis[v[i]]=vis[t]+1,q[tail++]=v[i];
}
return vis[666]!=-1;
}
int flow(int x,int y){
if(x==666)return y;
int r=0;
for(int i=first[x];~i&&y>r;i=next[i])
if(w[i]&&vis[v[i]]==vis[x]+1){
int t=flow(v[i],min(y-r,w[i]));
w[i]-=t,w[i^1]+=t,r+=t;
}
if(!r)vis[x]=-1;
return r;
}
int work(){
int ans=0,jy;
while(tell())while(jy=flow(0,0x3fffffff))ans+=jy;
return ans;
}
bool check(long long x){
init();
for(int i=1;i<=f;i++)add(0,i,cow[i]),add(i+f,666,cap[i]);
for(int i=1;i<=f;i++)
for(int j=1;j<=f;j++)
if(map[i][j]<=x)
add(i,j+f,0x3fffffff);
return work()==all;
}
}dinic;
signed main(){
memset(map,0x3f,sizeof(map));
scanf("%d%d",&f,&m);
for(int i=1;i<=f;i++)map[i][i]=0;
for(int i=1;i<=f;i++)scanf("%d%d",&cow[i],&cap[i]),all+=cow[i];
for(int i=1;i<=m;i++){
scanf("%d%d%d",&xx,&yy,&zz);
map[xx][yy]=min(map[xx][yy],(long long)zz),map[yy][xx]=map[xx][yy];
}
for(int k=1;k<=f;k++)
for(int i=1;i<=f;i++)
for(int j=1;j<=f;j++){
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
if(map[i][j]<=1000000000LL*200)maxx=max(maxx,map[i][j]);
}
long long l=0,r=maxx,ans=-1;
while(l<=r){
long long Mid=(l+r)/2;
if(dinic.check(Mid))r=Mid-1,ans=Mid;
else l=Mid+1;
}
printf("%lld\n",ans);
}
POJ 2391 Floyd+二分+拆点最大流的更多相关文章
- POJ 2391 floyd二分+拆点+最大流
Ombrophobic Bovines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20904 Accepted: 4 ...
- POJ 2391 Ombrophobic Bovines ★(Floyd+二分+拆点+最大流)
[题意]有n块草地,一些奶牛在草地上吃草,草地间有m条路,一些草地上有避雨点,每个避雨点能容纳的奶牛是有限的,给出通过每条路的时间,问最少需要多少时间能让所有奶牛进入一个避雨点. 和POJ2112很类 ...
- POJ 2391 Ombrophobic Bovines ( 经典最大流 && Floyd && 二分 && 拆点建图)
题意 : 给出一些牛棚,每个牛棚都原本都有一些牛但是每个牛棚可以容纳的牛都是有限的,现在给出一些路与路的花费和牛棚拥有的牛和可以容纳牛的数量,要求最短能在多少时间内使得每头牛都有安身的牛棚.( 这里注 ...
- POJ 2391 Ombrophobic Bovines(二分+拆点+最大流)
http://poj.org/problem?id=2391 题意: 给定一个无向图,点i处有Ai头牛,点i处的牛棚能容纳Bi头牛,求一个最短时间T,使得在T时间内所有的牛都能进到某一牛棚里去. 思路 ...
- poj 2391 (Floyd+最大流+二分)
题意:有n块草地,一些奶牛在草地上吃草,草地间有m条路,一些草地上有避雨点,每个避雨点能容纳的奶牛是有限的,给出通过每条路的时间,问最少需要多少时间能让所有奶牛进入一个避雨点. 两个避雨点间可以相互到 ...
- 【bzoj1738】[Usaco2005 mar]Ombrophobic Bovines 发抖的牛 Floyd+二分+网络流最大流
题目描述 FJ's cows really hate getting wet so much that the mere thought of getting caught in the rain m ...
- poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分, dinic, isap
poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分 dinic /* * Author: yew1eb * Created Time: 2014年10月31日 星期五 ...
- POJ 2112 Optimal Milking ( 经典最大流 && Floyd && 二分 )
题意 : 有 K 台挤奶机器,每台机器可以接受 M 头牛进行挤奶作业,总共有 C 头奶牛,机器编号为 1~K,奶牛编号为 K+1 ~ K+C ,然后给出奶牛和机器之间的距离矩阵,要求求出使得每头牛都能 ...
- Risk UVA - 12264 拆点法+最大流+二分 最少流量的节点流量尽量多。
/** 题目:Risk UVA - 12264 链接:https://vjudge.net/problem/UVA-12264 题意:给n个点的无权无向图(n<=100),每个点有一个非负数ai ...
随机推荐
- Cordova Android项目如何做代码混淆
我想修改build.gradle配置 可是这个文件明确写了// GENERATED FILE! DO NOT EDIT!可是还是试了试: if (cdvReleaseSigningProperties ...
- Decorator - 利用装饰器武装前端代码
历史 以前做后端时,接触过一点Spring,也是第一次了解DI.IOC等概念,面向切面编程,对于面向对象编程还不怎么熟练的情况下,整个人慌的一批,它的日志记录.数据库配置等都非常方便,不回侵入到业务代 ...
- CF817F MEX Queries(线段树上二分)
题意 维护一个01串,一开始全部都是0 3种操作 1.把一个区间都变为1 2.把一个区间都变为0 3.把一个区间的所有数字翻转过来 每次操作完成之后询问区间最小的0的位置 l,r<=10^18 ...
- python-生成器即send()用法
参考链接: http://www.mamicode.com/info-detail-2399245.html 作者首先介绍了生成器的作用:是为了让程序员可以更简单的编写用来产生值的序列的代码,然后又介 ...
- P4555 [国家集训队]最长双回文串(回文树)
题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为 n 的串 S ,求 S 的最长双回文子串 T ,即可 ...
- springboot实现热部署,修改代码不用重启服务
1.引入热部署依赖 <!-- 热部署模块 --> <dependency> <groupId>org.springframework.boot</groupI ...
- MyBatis学习总结(17)——Mybatis分页插件PageHelper
如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该 ...
- ArcGIS api for javascript——加入两个动态地图
描述 这个示例表现如何加两个动态地图到一个地图.动态服务按用户缩放或平移服务器每次绘制的地图,ArcGISDynamicMapServiceLayer表示ArcGIS JavaScript API动态 ...
- 为什么Java里的Arrays.asList不能用add和remove方法?
在平时的开发过程中,我们知道能够将一个Array的对象转化为List.这种操作,我们仅仅要採用Arrays.asList这种方法即可了.笔者前段时间一直用这种方法,有一天,我发现通过Arrays.as ...
- 从零開始怎么写android native service?
从零開始怎么写android native service Android service对于从事android开发的人都不是一个陌生的东西,非常多人可能会认为服务非常easy. 服务是简单,由于复杂 ...