[bzoj1738]发抖的牛
二分答案,每一头牛向所有在规定时间内能走到的牛棚连inf的边,每一个源点向牛连牛数量的边,每一个牛棚向汇点连牛棚容量的边,能满流则意味着这个答案可行,否则不可行。
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 505
4 #define ll long long
5 #define inf 0x3f3f3f3f
6 struct ji{
7 int nex,to,len;
8 }e[N*N],edge[N*N];
9 queue<int>q;
10 int E,EE,n,m,x,y,z,s,a[N],d[N],head[N],work[N];
11 ll f[N][N];
12 void add(int x,int y,int z){
13 edge[E].nex=head[x];
14 edge[E].to=y;
15 edge[E].len=z;
16 head[x]=E++;
17 if (E&1)add(y,x,0);
18 }
19 bool bfs(){
20 q.push(0);
21 memset(d,-1,sizeof(d));
22 d[0]=0;
23 while (!q.empty()){
24 int k=q.front();
25 q.pop();
26 for(int i=head[k];i!=-1;i=edge[i].nex)
27 if ((edge[i].len)&&(d[edge[i].to]<0)){
28 d[edge[i].to]=d[k]+1;
29 q.push(edge[i].to);
30 }
31 }
32 return d[n]>=0;
33 }
34 int dfs(int k,int s){
35 if (k==n)return s;
36 int p;
37 for(int &i=work[k];i!=-1;i=edge[i].nex)
38 if ((edge[i].len)&&(d[edge[i].to]==d[k]+1)){
39 p=dfs(edge[i].to,min(s,edge[i].len));
40 if (p){
41 edge[i].len-=p;
42 edge[i^1].len+=p;
43 return p;
44 }
45 }
46 return 0;
47 }
48 int dinic(){
49 int k,ans=0;
50 while (bfs()){
51 memcpy(work,head,sizeof(work));
52 while (k=dfs(0,inf))ans+=k;
53 }
54 return ans;
55 }
56 bool pd(ll k){
57 for(int i=1;i<=n/2;i++)
58 for(int j=1;j<=n/2;j++)
59 if (f[i][j]<=k)add(i,j+n/2,inf);
60 int t=dinic();
61 memcpy(head,a,sizeof(a));
62 memcpy(edge,e,sizeof(e));
63 E=EE;
64 return t==s;
65 }
66 int main(){
67 scanf("%d%d",&n,&m);
68 memset(head,-1,sizeof(head));
69 for(int i=1;i<=n;i++){
70 scanf("%d%d",&x,&y);
71 add(0,i,y);
72 add(n+i,2*n+1,x);
73 s+=x;
74 }
75 memset(f,inf,sizeof(f));
76 for(int i=1;i<=n;i++)f[i][i]=0;
77 for(int i=1;i<=m;i++){
78 scanf("%d%d%d",&x,&y,&z);
79 f[x][y]=f[y][x]=min(f[x][y],1LL*z);
80 }
81 for(int i=1;i<=n;i++)
82 for(int j=1;j<=n;j++)
83 for(int k=1;k<=n;k++)
84 f[j][k]=min(f[j][k],f[j][i]+f[i][k]);
85 n=n*2+1;
86 ll l=0,r=2e11;
87 memcpy(a,head,sizeof(a));
88 memcpy(e,edge,sizeof(e));
89 EE=E;
90 while (l<r){
91 ll mid=(l+r>>1);
92 if (pd(mid))r=mid;
93 else l=mid+1;
94 }
95 if (l==2e11)l=-1;
96 printf("%lld",l);
97 }
[bzoj1738]发抖的牛的更多相关文章
- BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )
一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...
- 【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 ...
- BZOJ1738 [Usaco2005 mar]Ombrophobic Bovines 发抖的牛
先预处理出来每个点对之间的最短距离 然后二分答案,网络流判断是否可行就好了恩 /************************************************************ ...
- BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛
Description 约翰的牛们非常害怕淋雨,那会使他们瑟瑟发抖.他们打算安装一个下雨报警器,并且安排了一个撤退计划.他们需要计算最少的让所有牛进入雨棚的时间. 牛们在农场的F(1≤F≤200 ...
- BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 网络流 + 二分 + Floyd
Description FJ's cows really hate getting wet so much that the mere thought of getting caught in the ...
- bzoj 1738 [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 最大流+二分
题目要求所有牛都去避雨的最长时间最小. 显然需要二分 二分之后考虑如何判定. 显然每头牛都可以去某个地方 但是前提是最短路径<=mid. 依靠二分出来的东西建图.可以发现这是一个匹配问题 din ...
- bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)
听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...
- bzoj usaco 金组水题题解(2)
续.....TAT这回不到50题编辑器就崩了.. 这里塞40道吧= = bzoj 1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害 比较经典的最小割?..然而 ...
- BZOJ-USACO被虐记
bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...
随机推荐
- MySQL MHA 运行状态监控
一 项目描述 1.1 背景 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA ...
- 10.3 Nginx
Nginx介绍 engine X,2002年开发,分为社区版和商业版(nginx plus) 2019年 f5 Networks 6.7亿美元收购nginx Nginx 免费 开源 高性能 http ...
- C++学习 3 结构体
结构体基本概念: 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型: 结构体定义和使用: 语法:struct 结构体名 { 结构体成员列表 }: 通过结构体创建变量名的方式有三种: ...
- 通过Swagger文档生成前端service文件,提升前端开发效率
在企业级的项目开发过程中,一般会采用前后端分离的开发方式,前后端通过api接口进行通信,所以接口文档就显得十分的重要. 目前大多数的公司都会引入Swagger来自动生成文档,大大提高了前后端分离开发的 ...
- Geostatistical Analyst Tools(Geostatistical Analyst 工具)
Geostatistical Analyst 工具 1.使用地统计图层 # Process: GA 图层至格网 arcpy.GALayerToGrid_ga("", 输出表面栅格, ...
- 工厂模式--摆脱你日复一日new对象却依旧单身的苦恼!
前言 每每谈及到Java,就不免会想到一个悲伤的事实:你是否每天都在new对象,却依然坚守在单身岗上屹立不倒.(所谓面向对象编程hhh),这篇来学一下工厂模式,摆脱new对象的苦恼! 知识点 传统工厂 ...
- Java内存分析--栈--堆
Java内存分析--栈--堆 JVM的内存分析: 1.栈内存 1.连续的存储空间,遵循后进先出的原则. 2.每个线程包含一个栈区,栈区只保存基础数据类型的对象和自定义对象的引用. 3.每个栈中的数据都 ...
- bash反弹shell
part1:不求甚解的本地复现 攻击端Debian 10.x: 192.168.208.134 受害端Ubuntu : 192.168.208.135 攻击端打开(监听)某端口: 键入命令:[nc ...
- 【UE4 C++】学习笔记汇总
UE4 概念知识 基础概念--文件结构.类型.反射.编译.接口.垃圾回收.序列化[导图] GamePlay架构[导图] 类的继承层级关系[导图] 反射机制 垃圾回收机制/算法 序列化 Actor 的生 ...
- 【数据结构与算法Python版学习笔记】算法分析
什么是算法分析 算法是问题解决的通用的分步的指令的聚合 算法分析主要就是从计算资源的消耗的角度来评判和比较算法. 计算资源指标 存储空间或内存 执行时间 影响算法运行时间的其他因素 分为最好.最差和平 ...