[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 路面修整 一开始没有想到离散化.然后离散化之后就 ...
随机推荐
- Windows下node-gyp查找VS安装路径简单解析
node-gyp的作用我已经不想赘述了,这里给一个我之前文章的链接:cnblogs看这里,知乎看这里.本文主要从源码入手,介绍node-gyp查找VisualStudio的过程 为了方便我们研究nod ...
- 学习使用Wpf开源的文本编辑器—smithhtmleditor
前言 本文主要介绍使用Wpf文本编辑器--smithhtmleditor. 编辑器使用 首先新建一个项目WpfEditor. 然后到Codeplex下载smithhtmleditor. 下载地址:ht ...
- 活动回顾|ShardingSphere X openGauss,将会产生怎样的化学反应?
"ShardingSphere 作为 openGauss 生态的开源分布式数据库解决方案,将持续助力于 openGauss,满足千行百业广大客户分布式场景需求." 5月29日,由 ...
- ssh 批量免密登陆
SSH第一次连接远程主机 公钥交换原理 1.客户端发起链接请求2.服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)3.客户端生成密钥对4.客户端用自己的公钥异或会话ID,计算出一个 ...
- AutoCAD云产品平台ForgeViewer格式离线部署思路分析
背景 在上一篇博文中CAD图DWG解析WebGIS可视化技术分析总结提到,利用AutoCAD的自有云产品 Autodesk Forge,能在浏览器中渲染 3D 和 2D 模型数据,实现DWG图形的We ...
- C chdir函数
chdir微软官方文档 在制作小游戏时遇到的问题:图片音频等资源文件太多,和exe同一个目录不方便集中管理 整理方案1 首先创建了一个名为"resource"的文件夹,把程序执行过 ...
- Java(1)开发环境配置及第一个程序Hello World
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201468.html 博客主页:https://www.cnblogs.com/testero ...
- 「软件测试实战教程系列(三)」弃繁就简,接口测试神器Postman|收藏版
软件测试实战教程系列(三)弃繁就简,接口测试神器Postman|收藏版 Postman主要帮我们干了三件事: 1.把相关集合放到一个集合当中方便管理. 2.对指定接口发送请求. 3.断言 下面我们使用 ...
- .NET 分布式系统架构(有转载部分)
一.设计目的 搭建一个大型平台需要综合考虑很多方面,不单纯是软件架构,还包括网络和硬件设备等.由于现代大部分应用建设都面临用户多.高并发.高可用的需求,传统软件架构已不能满足需求,需要支持分布式软件架 ...
- go-zero 实战之 blog 系统
go-zero 实战项目:blog 本文以 blog 的网站后台为例,着重介绍一下如何使用 go-zero 开发 blog 的用户模块. 本文涉及的所有资料都已上传 github 仓库 kougazh ...