[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 路面修整 一开始没有想到离散化.然后离散化之后就 ...
随机推荐
- 如何迁移 Spring Boot 到函数计算
作者 | 田小单 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上 ...
- 洛谷3233 HNOI2014(虚树+dp)
膜拜一发\(mts\_246,forever\_shi\) 这两位爷是真的无敌! 首先来看这个题,一看题目的数据范围和"关键点"字眼,我们就能得知这是一道虚树题 那就先一如既往的建 ...
- python中函数里面冒号和函数后面的箭头是什么含义
函数里参数后的冒号其实是参数的类型建议,但是只是建议,就算你不按约定传也不会报错.而后面的箭头,则是函数返回值的类型建议.
- 使用vue-cli+webpack搭建vue开发环境
在这里我真的很开心,好久没有用过博客,今天突然看到了我的博客有不少人看过,虽然没有留下脚印,但是还是激起了我重新拿起博客的信心,感谢大家. 在这里我们需要首先下载node,因为我们要用到npm包下载, ...
- FastAPI 学习之路(五十三)根据环境不同连接不同数据库
在实际的开发过程中,我们数据库,可以根据连接的环境不一样,我们会拆分成不一样的数据库,根据我们所要用的环境来选择对应的数据库即可,那么我们应该如何去实现根据选择去选择不一样的数据库呢. 首先,我们找一 ...
- Golang通脉之反射
什么是反射 官方关于反射定义: Reflection in computing is the ability of a program to examine its own structure, pa ...
- 第二次Scrum Metting
日期:2021年4月25日会议主要内容概述:前后端针对WebAPI进行协调与统一工作,商量接下来两日计划:敲定部分设计细节. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中 ...
- RSA加密——前端JSEncrypt
RSA加密--前端JSEncrypt 介绍 JSEncrypt是一个RSA加密库,在没有SSL加密传输通道支持https协议的情况下,该库可以在http传输重要信息如时,保证数据的安全性.我们小组 ...
- VS2019、Qt5.12及QGis3.16开发常见问题汇总
在C++.Qt软件开发过程中,常常遇到一些编译错误或警告:本文将VS2019.Qt5.12.10和QGis3.16.10的二次开发过程常见的问题做了整理,供大家参考,也便于日后查阅.该内容分为四部分: ...
- Register Abstraction(9)
This post will explain how to use the UVM Register Abstraction Layer (RAL) to generate register tran ...