当前位置: 首页 > 编程日记 > 正文

POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量

联系:http://poj.org/problem?id=2391

题意:有f个草场,每一个草场当前有一定数目的牛在吃草,下雨时它能够让一定数量的牛在这里避雨,f个草场间有m条路连接,每头牛通过一条路从一点到还有一点有一定的时间花费,如今要下雨了,农场主发出警报牛就会马上去避雨。

如今告诉每一个草场的情况。以及m条边的信息。农场主至少须要提前多久发出警报才干保证全部牛都能避雨?假设不是全部牛都能成功避雨输出-1。


思路:这道题须要拆点,是看到魏神的博客才知道的。我们把原图拆成一个二分图,避免突破最大距离限制的情况,每一个点变成两个点,即i变为i‘和i’‘,建立一个源点连接每一个i’,容量为初始每一个草场牛的数目。建立一个汇点,全部的i‘’指向汇点,容量为每一个草场能容纳的牛的数目。假设两个点i和j连接。则在i’和j‘’以及j‘和i’‘之间建一条路径。容量为INF,能够走无限多的牛。然后这道题就和之前做的一道POJ2112一样了,POJ2112不用拆点,由于它本身就是一个二分图。

接下来就是Floyd处理出随意两点间最短路径。然后二分答案。

可是这道题还没有完,我套之前的Dinic模板,TLE了。这道题最大可能的边数比POJ2112大,而Case时限一样,我手写队列。还是TLE,我再把vis数组去掉用dist取代vis功能,还是TLE,我在网上搜AC的Dinic代码,看到一个和我的差点儿相同。粘贴交了一发。TLE,无力吐槽。。。

找到了一个看上去有些修改的代码,依照它修改的地方改我自己的。219MS AC。

我看了一下。我认为基本的优化地方是这样:

1. 我之前的模板,是从源点起找遍每一条增广路进行松弛,优化算法是找到一条增广路松弛、退出,更新最大流值,再找下一条,直到更新值返回0说明已更新到头,避免了多余的搜索。

2. 假设此时的顶点已不存在增广路,将它从当前的层次网络中删除。回溯后不会再搜。

我认为这是两个优化到的地方,这么进行了优化之后效率提升非常明显!


#include<cstring>
#include<string>
#include<fstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cctype>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<stack>
#include<ctime>
#include<cstdlib>
#include<functional>
#include<cmath>
using namespace std;
#define PI acos(-1.0)
#define MAXN 200100
#define eps 1e-7
#define INF 0x7FFFFFFF
#define LLINF 0x7FFFFFFFFFFFFFFF
#define seed 131
#define mod 1000000007
#define ll long long
#define ull unsigned ll
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1struct node{int u,w,next;
}edge[100010];
int head[410],dist[410],q[410];
int aa[410],bb[410];
ll e[410][410];
int n,m,cnt,src,sink,f,p;
void add_edge(int a,int b,int c){edge[cnt].u = b;edge[cnt].w = c;edge[cnt].next = head[a];head[a] = cnt++;
}
void floyd(){int i,j,k;for(k=1;k<=f;k++){for(i=1;i<=f;i++){if(e[i][k]==LLINF)  continue;for(j=1;j<=f;j++){if(e[i][k]+e[k][j]<e[i][j]&&e[i][k]!=LLINF&&e[k][j]!=LLINF)e[i][j] = e[i][k] + e[k][j];}}}
}
void build_graph(ll minm){int i,j;cnt = 0;memset(head,-1,sizeof(head));for(i=1;i<=f;i++){add_edge(src,i,aa[i]);add_edge(i,src,0);add_edge(i+f,sink,bb[i]);add_edge(sink,i+f,0);for(j=1;j<=f;j++){if(e[i][j]<=minm){add_edge(i,j+f,INF);add_edge(j+f,i,0);}}}
}
bool bfs(){int i,j;memset(dist,-1,sizeof(dist));int f = 0, t = 1;q[0] = src;dist[src] = 1;while(f<t){int u = q[f++];for(i=head[u];i!=-1;i=edge[i].next){int v = edge[i].u;if(dist[v]==-1&&edge[i].w){dist[v] = dist[u] + 1;q[t++] = v;}}}if(dist[sink]!=-1)  return true;return false;
}
int dfs(int u,int delta){int i,j;int dd;if(u==sink) return delta;for(i=head[u];i!=-1;i=edge[i].next){if(dist[edge[i].u]==dist[u]+1&&edge[i].w&&(dd = dfs(edge[i].u,min(delta,edge[i].w)))){edge[i].w -= dd;edge[i^1].w += dd;return dd;}}dist[u] = -1;return 0;
}
int main(){int i,j;int ta,tb,tc;int cow;scanf("%d%d",&f,&p);n = 2 * f + 2;src = 0;sink = 2 * f + 1;cow = 0;for(i=1;i<=f;i++){scanf("%d%d",&aa[i],&bb[i]);cow += aa[i];}for(i=0;i<=f;i++){for(j=0;j<=f;j++)e[i][j] = LLINF;e[i][i] = 0;}for(i=0;i<p;i++){scanf("%d%d%d",&ta,&tb,&tc);if(tc<e[ta][tb])    e[ta][tb] = e[tb][ta] = tc;}floyd();ll mid,l = 0,r = 0;for(i=1;i<=f;i++){for(j=1;j<=f;j++){if(e[i][j]!=LLINF)  r = max(e[i][j],r);}}int sum;ll ans = -1;while(l<=r){mid = (l+r)>>1LL;//cout<<l<<" "<<r<<endl;sum = 0;build_graph(mid);while(bfs()){while(1){int ttt = dfs(src,INF);if(!ttt)    break;sum += ttt;}}if(sum==cow){ans = mid;r = mid-1;}else    l = mid + 1;}printf("%I64d\n",ans);return 0;
}



版权声明:本文博主原创文章。博客,未经同意不得转载。

相关文章:

25年了,我总结出这些信息提取的经验教训

作者 | Ehud Reiter译者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】近日&#xff0c;本文作者阿伯丁大学计算科学系教授 Ehud Reiter 及其带领的阅读小组读了一篇让他们印象深刻的论文——由 Ralph Grishman 发表的《信息提取 25 年》&#xff08…

朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll模型

在《朴素、Select、Poll和Epoll网络编程模型实现和分析——Select模型》中&#xff0c;我们分析了它只能支持1024个连接同时处理的原因。但是在有些需要同时处理更多连接的情况下&#xff0c;1024个连接往往是不够的&#xff0c;也就是不能够高并发。那么这个时候我们就可以采用…

flashcom中远程共享对象SharedObject的用法

觉得这篇文章比较好&#xff0c;转载回来。学习fcs也有差不多一个月了,感觉最有特色的东西还是SharedObject.SharedObject有不少东西,本地操作就不说了(相信很多人没接触fcs也用过);就说说远程共享对象吧.基本的应用流程是:my_nc new NetConnection(); my_nc.connect("rt…

Hive-1.2.0学习笔记(一)安装配置

鲁春利的工作笔记&#xff0c;好记性不如烂笔头下载hive&#xff1a;http://hive.apache.org/index.htmlHive是基于Hadoop的一个数据仓库工具&#xff0c;提供了SQL查询功能&#xff0c;能够将SQL语句解析成MapReduce任务对存储在HDFS上的数据进行处理。MySQ安装Hive有三种运行…

邮件安全隐患及其防范技术研究

邮件安全隐患及其防范技术研究<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />陈小兵【antian365.com】摘要电子邮件是Internet上使用最为频繁和广泛的服务&#xff0c;在给人们带来便利的同时&#xff0c;亦带来令人担忧的邮件…

必看!52篇深度强化学习收录论文汇总 | AAAI 2020

所有参与投票的 CSDN 用户都参加抽奖活动群内公布奖项&#xff0c;还有更多福利赠送来源 | 深度强化学习实验室&#xff08;ID:Deep-RL&#xff09;作者 | DeepRLAAAI 2020 共收到的有效论文投稿超过 8800 篇&#xff0c;其中 7737 篇论文进入评审环节&#xff0c;最终收录数量…

朴素、Select、Poll和Epoll网络编程模型实现和分析——Epoll模型

在阅读完《朴素、Select、Poll和Epoll网络编程模型实现和分析——Select模型》和《朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll模型》两篇文章后&#xff0c;我们发现一个问题&#xff0c;不管select函数还是poll函数都不够智能&#xff0c;它们只能告诉我们成功…

Scala 深入浅出实战经典 第88讲:Scala中使用For表达式实现map、flatMap、filter

高级函数 map,flatMap,filter用for循环的实现。package com.dt.scala.forexpressionobject For_Advanced {def main(args: Array[String]) {}def map[A, B](list: List[A], f: A > B): List[B] for(element <- list) yield f(element)def flatMap[A, B](list: List[A], f…

抛弃Python,我们为什么用Go编写机器学习架构?

所有参与投票的 CSDN 用户都参加抽奖活动群内公布奖项&#xff0c;还有更多福利赠送作者 | Caleb Kaiser译者 | 弯月&#xff0c;编辑 | 郭芮来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;如今&#xff0c;众所周知Python是机器学习项目中最流行的语言。尽管R、C…

朴素、Select、Poll和Epoll网络编程模型实现和分析——模型比较

经过之前四篇博文的介绍&#xff0c;可以大致清楚各种模型的编程步骤。现在我们来回顾下各种模型&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 模型编程步骤对比《朴素、Select、Poll和Epoll网络编程模型实现和分析——朴素模型》中介绍的是最基本的网络编程…

使用VM虚拟机的一点小技巧

今天想为朋友弄一个虚拟机系统文件&#xff0c;这样就可以直接拷贝过去&#xff0c;直接让他用了。哪成想电脑里的系统镜像文件不能用&#xff0c;也不知道是不是VM不支持&#xff0c;反正怎么着也引导不起来了。无奈只好用硬件光驱来装虚拟系统&#xff0c;把2003系统盘装入光…

翻译:AKKA笔记 - Actor消息 -1(二)

消息 我们只是让QuoteRequest到ActorRef去但是我们根本没见过消息类&#xff01; 它是这样的&#xff1a;&#xff08;一个最佳实践是把你的消息类包装在一个完整的对象里以利于更好的组织&#xff09; TeacherProtocol package me.rerun.akkanotes.messaging.protocolsobject …

远程安装oracle 10.2.1 for redhat 5.0 2.6.18-53.el5xen

远程安装oracle <?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" />10.2.1 for redhat 5.0 2.6.18-53.el5xen<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />今天有个朋友打电…

伯克利新无监督强化学习方法:减少混沌所产生的突现行为

作者 | Glen Berseth译者 | Arvin编辑 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】所有生命有机体都在环境中占据一席之地&#xff0c;使它们在周围不断增加的熵中可以保持相对可预测性。例如&#xff0c;人类竭尽全力保护自己免受意外袭击--我们…

朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll、Epoll模型处理长连接性能比较

在《朴素、Select、Poll和Epoll网络编程模型实现和分析——模型比较》一文中&#xff0c;我们分析了各种模型在处理短连接时的能力。本文我们将讨论处理长连接时各个模型的性能。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 我们可以想象下场景&#xff0c…

Topcoder SRM 663 DIV 1

ABBADiv1 题意&#xff1a; 规定两种操作&#xff0c;一种是在字符串的末尾添加A&#xff0c;另一种是在末尾添加B然后反转字符串。现在给你一个起始串&#xff0c;一个终点串&#xff0c;然后问你是否能够通过以上两种操作&#xff0c;从起始串变为终点串。 题解&#xff1a; …

跨平台PHP调试器设计及使用方法——立项

作为一个闲不住且希望一直能挑战自己的人&#xff0c;我总是在琢磨能做点什么。自从今年初开始接触PHP&#xff0c;我也总想能在这个领域内产生点贡献。那能做点什么呢&#xff1f;我经常看到很多phper说自己设计了一个什么框架&#xff0c;或者说自己搭建了一个什么系统。虽然…

机器推理文本+视觉,跨模态预训练新进展

作者 | 李根、段楠、周明来源 | 微软研究院AI头条&#xff08;ID:MSRAsia&#xff09;【导读】机器推理要求利用已有的知识和推断技术对未见过的输入信息作出判断&#xff0c;在自然语言处理领域中非常重要。本文将介绍微软亚洲研究院在跨模态预训练领域的研究进展。近年来&…

[LeetCode]:94:Binary Tree Inorder Traversal

题目&#xff1a; Given a binary tree, return the inorder traversal of its nodes values. For example:Given binary tree {1,#,2,3}, 1\2/3return [1,3,2]. 代码&#xff1a; public class Solution {public static ArrayList<Integer> listResult new ArrayList&l…

腾讯 AI 2019这一年

所有参与投票的 CSDN 用户都参加抽奖活动群内公布奖项&#xff0c;还有更多福利赠送近日&#xff0c;腾讯AI实验室总结了 2019 年其取得重大进展的两大研究方向&#xff0c;推动实现的行业应用以及前沿研究探索方面的成果。一、两大难题攻坚&#xff1a;通用人工智能与数字人用…

跨平台PHP调试器设计及使用方法——探索和设计

在《跨平台PHP调试器设计及使用方法——立项》一文中&#xff0c;我确定了使用xdebug作为调试器插件部分的基础组件。xdebug提供了一个远程调试的功能&#xff08;相关资料可以详见https://xdebug.org/docs/remote&#xff09;&#xff0c;我们这个项目便是基于这个功能实现的。…

Ubuntu下允许Root用户直接登录图形界面

ubuntu root是默认禁用了&#xff0c;不允许用root登陆&#xff0c;所以先要设置root密码。 执行&#xff1a;sudo passwd root 接着输入密码和root密码&#xff0c;重复密码。再重新启动就可以用root登陆。 另外&#xff0c;默认情况下是不允许用root帐号直接登陆图形界面的。…

携程App for Apple Watch探索

在Apple Watch发布之后&#xff0c;很多App都针对它设计了相应的版本。旅行作为与Apple Watch时间管理特性契合度较高的场景&#xff0c;同时携程旅行作为国内领先的OTA行业App&#xff0c;也成为了首批适配Apple Watch并荣登Apple官网和App Store推荐的应用之一。InfoQ就App f…

跨平台PHP调试器设计及使用方法——通信

首先引用《跨平台PHP调试器设计及使用方法——探索和设计》中的结构图&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 本文要介绍的是我们逻辑和pydbgp通信的实现&#xff08;图中红框内内容&#xff09;。 设计通信之前&#xff0c;我需要先设计一种通信协议…

MVP模式的相关知识

MVP 是从经典的模式MVC演变而来&#xff0c;它们的基本思想有相通的地方&#xff1a;Controller/Presenter负责逻辑的处理&#xff0c;Model提供数据&#xff0c;View负责显示。作为一种新的模式&#xff0c;MVP与MVC有着一个重大的区别&#xff1a;在MVP中View并不直接使用Mod…

“数学不行,还能干点啥?”面试官+CTO:干啥都费劲!

关于数学与程序员的“暧昧”关系&#xff0c;先看看网友的看法&#xff1a;同时编程圈也流传着一个段子&#xff1a;一流程序员靠数学&#xff0c;二流程序员靠算法&#xff0c;末端程序员靠百度&#xff0c;低端看高端就是黑魔法。想一想&#xff0c;我们日常学习、求职、工作…

CentOS7 yum 源的配置与使用

YUM&#xff1a;Yellowdog Updater Modified Yum&#xff08;全称为 Yellow dog Updater, Modified&#xff09;是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理&#xff0c;能够从指定的服务器自动下载RPM包并且安装&#xff0c;可以自动处理依赖…

跨平台PHP调试器设计及使用方法——协议解析

在《跨平台PHP调试器设计及使用方法——探索和设计》一文中&#xff0c;我介绍了将使用pydbgp作为和Xdebug的通信库&#xff0c;并让pydbgp以&#xff08;孙&#xff09;子进程的方式存在。《跨平台PHP调试器设计及使用方法——通信》解决了和pydbgp通信的问题&#xff0c;本文…

测试客户端发图图

转载于:https://blog.51cto.com/ericsong/116942

搜狐、美团、小米都在用的Apache Doris有什么好? | BDTC 2019

【导读】12 月 5-7 日&#xff0c;由中国计算机学会主办&#xff0c;CCF 大数据专家委员会承办&#xff0c;CSDN、中科天玑协办的中国大数据技术大会&#xff08;BDTC 2019&#xff09;在北京长城饭店隆重举行。100 顶尖技术专家、1000 大数据从业者齐聚于此&#xff0c;以“大…