首页 > 其他分享 >ABC324F Beautiful Path

ABC324F Beautiful Path

时间:2023-10-15 09:03:08浏览次数:44  
标签:Beautiful le text sum 路径 dfrac Path aligned ABC324F

给出一张 DAG,每条边有两种边权 \(b\) 与 \(c\),求一条从 \(1\) 到 \(n\) 的路径,问路径经过的边的 \(\dfrac{\sum b}{\sum c}\) 的最大值是多少。
\(n, m \le 2 \times 10^5\)。

这不是经典 01 分数规划吗?将题目中的要求写成如下形式:

\[\begin{aligned} & \text{Maximize } \dfrac{\sum_{1 \le i \le m} x_i b_i}{\sum_{1 \le i \le m} x_i c_i} \\ & \text{s.t. } \text{ 所有 } i \in [1, m] \land x_i = 1 \text{ 的边构成一条 } 1 \text{ 到 } n \text{ 的路径} \end{aligned} \]

我们考虑二分一个答案 \(p\),使得有如下关系成立:

\[\forall s \in S, \dfrac{\sum_{i \in s} b_i}{\sum_{i \in s} c_i} \le p \]

其中 \(S\) 为 \(1\) 到 \(n\) 的所有路径所构成的集合。容易看出 \(p\) 的最小值就是所求的答案。将上边的式子转化一下,我们就得到:

\[\begin{aligned} \dfrac{\sum_{i \in s} b_i}{\sum_{i \in s} c_i} &\le p \\ \sum_{i \in s} b_i &\le p \sum_{i \in s} c_i \\ \sum_{i \in s} b_i - p \sum_{i \in s} c_i &\le 0 \\ \sum_{i \in s} \left(b_i - p c_i \right) &\le 0 \\ \end{aligned} \]

将边权重定义为 \(b - pc\),那么我们就容易发现上述条件成立等价于 \(1\) 到 \(n\) 的最长路小于等于 \(0\),当且仅当 \(p\) 取到答案时取等号。于是我们只需要二分这个答案 \(p\),将边权重新定义,然后跑 \(1\) 到 \(n\) 的最长路即可。

这里需要注意的是,原题给定的是一张 DAG,那么最长路是可以用拓扑排序去跑的(而且据说 SPFA 被卡了),于是就得到了一个 \(\mathcal{O}((n + m) \log V)\) 的做法。

记得拓扑排序的时候把每个入度为 \(0\) 的点塞进去。

代码

标签:Beautiful,le,text,sum,路径,dfrac,Path,aligned,ABC324F
From: https://www.cnblogs.com/forgot-dream/p/17765214.html

相关文章

  • Atcoder Beginner Contest 324 F Beautiful Path 题解-分数规划
    为了更好的阅读体验,请点击这里分数规划小技巧:尽可能将式子写成存在某种取值,使得不等式成立的形式。不然可能需要绕几个弯才能想出来。题目链接题目大意:给出一个DAG,每条边有一个\(b_i,c_i\),保证从编号小的边向编号大的边连边,且\(1\)到\(n\)必有路径,求\(1\)到\(n\)......
  • DropPath
    DropPath类似于Dropout,不同的是Drop将深度学习模型中的多分支结构随机“失效”而Dropout是对神经元随机“失效”DropPath在网络中的应用假设在前向传播中有如下的代码:x=x+self.drop_path(self.conv(x))那么在drop_path分支中,每个batch有drop_prob的概率样本在......
  • python beautifulsoup
    beautifulsoup1.安装pipinstallbeautifulsoup4如果这个安装不了,就手动下载安装:下载地址:https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/解压后执行pythonsetup.pyinstall拷贝python安装目录下的C:\ProgramFiles\python\Tools\scripts\2to3.py文......
  • Servlet.service() for servlet [dispatcherServlet] in context with path []
    一个不小心出现的错误,接口测试报500日志输出信息如下:[nio-8080-exec-2]o.a.c.c.C.[.[.[/].[dispatcherServlet]:Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Requestprocessingfailed;nestedexceptionisjava.lang.Nu......
  • DPDK-22.11.2 [四] Virtio_user as Exception Path
    因为dpdk是把网卡操作全部拿到用户层,与原生系统驱动不再兼容,所以被dpdk接管的网卡从系统层面(ipa/ifconfig)无法看到,同样数据也不再经过系统内核。如果想把数据再发送到系统,就要用到virtiouser。这种把数据从dpdk再发送到内核的步骤,就叫做exceptionpath。有关virtiouser,又有一......
  • Python爬虫必杀技:XPath
    XPath是什么XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。跟BeautifulSoup4一样都是用来解析页面内容的工具,只......
  • 【分享】影刀使用xpath捕获指定的元素
    xpath捕获元素比较精准,前面也介绍了xpath的用法现在捕获社区里帖子详情页的标题//*[@class='discuss_detail_header___3LhnQ']/h1找到class是discuss_detail_header___3LhnQ的子元素h1获取文章内容//*[@id='w-e-textarea-1']找到id是w-e-textarea-1的元素获取元素......
  • Go - Finding the Shortest Path on a Graph
    Problem: Youwanttofindtheshortestpathbetweentwonodesonaweightedgraph.Solution: UseDijkstra’salgorithmtofindtheshortestpathbetweentwonodes.Dijkstra’salgorithmalsousesapriorityqueue,whichcanbeimplementedusingaminheap.......
  • 2023-1-0xpython_beautiful_soup
    +++title="python_beautiful_soup"description=""date=2023-03-20T15:50:22+08:00featured=falsecomment=truetoc=truereward=truecategories=[""]tags=[""]series=[]images=[]+++还没写,先留着空位......
  • 2023-01-31python-path
    +++title="使用标准的path处理方法(Python)"description=""date=2023-01-31T15:26:05+08:00featured=falsecomment=truetoc=truereward=truecategories=[""]tags=["python"]series=[]images=[]+++标准方......