二分答案,每一头牛向所有在规定时间内能走到的牛棚连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. Blazor Webassembly多标签页开发

    最近准备用Blazor Webassembly做后台开发要用到多标签页,找了半天发现绝大多数都是Blazor Server的多标签没有Webassembly.没办法只能自己想办法造轮子了. 查了许多资 ...

  2. 题解 Crash 的文明世界

    题目传送门 题目大意 给出一个\(n\)个点的树,和常数\(k\),对于\(\forall i\in[1,n]\),求出: \[\sum_{j=1}^{n} \text{dist}(i,j)^k \] ...

  3. PAT (Basic Level) Practice (中文)1014 福尔摩斯的约会 (20分)

    1014 福尔摩斯的约会 (20分) 带侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hys ...

  4. Billu_b0x2内网渗透(多种提权方法)靶场-vulnhub

    个人博客阅读体验更佳 本次来试玩一下vulnhub上的Billu_b0x2,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题.靶场推荐使用N ...

  5. C++ 与 Visual Studio 2019 和 WSL

    Visual Studio 使用 C++ 的 Linux 开发(WSL) https://devblogs.microsoft.com/cppblog/c-with-visual-studio-201 ...

  6. 爬虫逆向基础,理解 JavaScript 模块化编程 webpack

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 简介 在分析一些站点的 JavaScript 代码时,比较简单的代码,函数通常都是一个一个的,例 ...

  7. 【UE4 C++】读写Text文件 FFileHelper

    CoreMisc.h 读取 FFileHelper::LoadFileToString 读取全部内容,存到 FString FString TextPath = FPaths::ProjectDir( ...

  8. Java字符串转数字和数字转字符串

    int转String有3种方式 (1)num + "" (2)String.valueOf(num) (3)Integer.toString(num) String转int有2种方 ...

  9. airtext初始化(一)

  10. Java:锁笔记

    Java:锁笔记 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. Java 锁之公平锁和非公平锁 公平锁 是指多个线程按照申请锁的顺序来获取锁,类似于排队买 ...