[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 路面修整 一开始没有想到离散化.然后离散化之后就 ...
随机推荐
- 在昨天夜黑风高的晚上,我偷了隔壁老王的Python入门课件,由浅入深堪称完美!
隔壁老王是一个资深码农,就业教育事业的秃顶之才昨天我下楼打酱油,看他迎面走来,满目春光我好奇的问道:老王,有什么好事,隔壁小花叫你上门了吗?老王:秘密!!我心想:哎呦~不错啊半晚之时,连猫狗都睡着了, ...
- java多线程--启动线程
简单理解启动线程的几种方式: 1. 实现Runnable接口创建一个任务, 调用myTask.run()方法来启动它 2, 构建Thread对象, 调用thread.start()方法启动 这里可以看 ...
- perl 不支持多条件比较
perl 不支持多条件比较,if(a < $var < b),这个条件表达式在C语言里面是支持的,但是在Perl中必须写成if(($var > a)&&($var & ...
- 【UE4 设计模式】装饰器模式 Decorator Pattern
概述 描述 动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活.是一种对象结构型模式. 套路 抽象构件(Component) 具体构 ...
- 全连接层dense作用
参考来源
- [对对子队]会议记录5.27(Scrum Meeting12)
今天已完成的工作 朱俊豪 工作内容:寻找电池模型和BGM,修改关卡选择场景 相关issue:优化初步导出版本 相关签入:perf:地图界面优化 feat:更新系列资源(星星,大电池) 何瑞 ...
- CentOS系统优化一键配置脚本
#!/usr/bin/env bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export P ...
- MIPI的走线阻抗
MIPI的走线阻抗100欧的要求是根据LVDS(Low Voltage Differential Signaling)电平定义的. LVDS差分信号PN两线最大幅度是350mV,内部一个恒流源电流是3 ...
- 洛谷 P3332 [ZJOI2013]K大数查询 (整体二分理解)
链接: P3332 题意: 维护 \(n(1\leq n\leq 5\times10^4)\) 个可重整数集,编号从 \(1\) 到 \(n\).有 \(m(1\leq m\leq5\times10^ ...
- Python ImportError: No module named '_tkinter', please install the python3-tk package
ImportError: No module named '_tkinter', please install the python3-tk package 这个问题的原因是使用的python3环境内 ...