二分答案,每一头牛向所有在规定时间内能走到的牛棚连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]发抖的牛的更多相关文章

  1. BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )

    一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...

  2. 【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 ...

  3. BZOJ1738 [Usaco2005 mar]Ombrophobic Bovines 发抖的牛

    先预处理出来每个点对之间的最短距离 然后二分答案,网络流判断是否可行就好了恩 /************************************************************ ...

  4. BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛

    Description 约翰的牛们非常害怕淋雨,那会使他们瑟瑟发抖.他们打算安装一个下雨报警器,并且安排了一个撤退计划.他们需要计算最少的让所有牛进入雨棚的时间.    牛们在农场的F(1≤F≤200 ...

  5. 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 ...

  6. bzoj 1738 [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 最大流+二分

    题目要求所有牛都去避雨的最长时间最小. 显然需要二分 二分之后考虑如何判定. 显然每头牛都可以去某个地方 但是前提是最短路径<=mid. 依靠二分出来的东西建图.可以发现这是一个匹配问题 din ...

  7. bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)

    听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...

  8. bzoj usaco 金组水题题解(2)

    续.....TAT这回不到50题编辑器就崩了.. 这里塞40道吧= = bzoj 1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害 比较经典的最小割?..然而 ...

  9. BZOJ-USACO被虐记

    bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...

随机推荐

  1. ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用

    前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...

  2. 🚴‍♂️全套MySQL数据库教程_Mysql基础入门教程,零基础小白自学MySQL数据库必备教程☔ #002 # 第二单元 MySQL数据类型、操作表#

    二.本单元知识点概述 (Ⅰ)知识点概述 二.本单元教学目标 (Ⅰ)重点知识目标 1.Mysql的数据类型2.如何选择数据类型3.创建表4.修改表5.删除表 (Ⅱ)能力目标 1.熟练创建数据库及删除数据 ...

  3. JVM堆内存泄露分析

      一.背景 公司有一个中间的系统A可以对接多个后端业务系统B,一个业务系统以一个Namespace代表, Namespace中包含多个FrameChannel(用holder保存),表示A连接到业务 ...

  4. 看动画学算法之:平衡二叉搜索树AVL Tree

    目录 简介 AVL的特性 AVL的构建 AVL的搜索 AVL的插入 AVL的删除 简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜 ...

  5. ArrayList和LinkedList、及Vector对比分析

    ArrayList和LinkedList 底层结构 两者的差别主要来自于底层的数据结构不同,ArrayList是基于数组实现的,LinkedList是基于双链表实现的. 接口实现 LinkedList ...

  6. Pycharm无法打开,双击没反应

    以下方案皆为引用,仅供参考. 方案一: 1.先声明一下,这种解决方法适用于任何版本的永久破解启动不了的情况(包括:2019版本的)2.下面直接切入正题之所以我们破解之后,不能正常启动的原因有两种:① ...

  7. Python代码阅读(第21篇):将变量名称转换为蛇式命名风格

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现将变量名称转换为蛇式命名风格(snake case)的功能. 本篇阅读的代码片段来自于30-second ...

  8. GEOS使用记录

    由于需要计算GIS障碍物的缓冲区,所以研究了 一下GEOS库的使用,将使用的一些细节内容记录一下: 1.vs2010IDE无法编译较高版本的GEOS库,较高版本的库使用了更加高级的C++语法,如果想使 ...

  9. STM32单片机的学习方法(方法大体适用所有开发版入门)

    1,一款实用的开发板. 这个是实验的基础,有时候软件仿真通过了,在板上并不一定能跑起来,而且有个开发板在手,什么东西都可以直观的看到,效果不是仿真能比的.但开发板不宜多,多了的话连自己都不知道该学哪个 ...

  10. [LGP1866]编号

    传送门 题意:找n个数,使得 $ 1 \leq a_i \leq Maxnumber_i $ 求有多少种组合 这题我们可以看到,还有一种无解的情况 我们可以先判断无解的情况 首先把Maxnumber数 ...