zoukankan      html  css  js  c++  java
  • 醉醺醺的幻想乡

    显然第一问直接按照题意最大流。
    二次方流量考虑导数。
    (f(x))表示每条边单位流量费用(leq x)的最大流,答案就是对这个函数进行积分。
    (f)是个分段一次函数。这是因为边权费用导数(2ax+b)是个关于(x)的一次函数。
    (f)是上凸的。考虑最小割,一个割的代价在(x)初是个一次函数。
    由于(a,bleq 3),所以斜率只有(3n)种。
    所以(f)是个段数不超过(3n)的分段函数。
    考虑怎么求出(f)。可以分治,我们判定当前最左边的一次函数(a)和最右边的一次函数(b)交点((c,d)),考虑(c)点的值是否为(d)
    如果是,则返回,否则中间还有新的半平面。需要得到(c)处的直线才能继续递归。
    考虑如何得到某个点(x)处的直线。
    根据定义,每条边(i)的流量上界重定为(min(frac{x-b_i}{2a_i},c_i))
    用最大流算法跑实数最大流。
    对于一条满流的边(最小割所在边)。
    如果(a_i=0)(bleq x),则流量一次函数(+=c_i)
    如果(2a_ic_i+b_ileq x),则这条边的单位费用不会超过(x),流量一次函数(+=c_i)
    否则如果(x)增加(y),则流量一次函数(+=frac{y}{2a_i})
    流量一次函数的斜率加上(frac{1}{2a_i})
    同时发现(min(frac{x-b_i}{2a_i},c_i))只有在(xgeq b_i)才能(geq 0)
    所以流量一次函数的截距(-=frac{b_i}{2a_i})
    对于右边连向t的边,如果满流,则流量一次函数截距(+=f)
    使用分数类实现斜率/截距的运算。
    感觉好玄学。

  • 相关阅读:
    C/C++中变量的作用域和存储类型简介
    Java与JavaScript的区别你明白吗?
    js-2018-11-09 关于Array中的srot()方法和compare()方法
    js-2018-11-01 关于break和continue语句
    0427表格学习
    0426基础标签学习
    css3部分整理
    img图片占不满整个div
    基于google protobuf 的 socket udp 通信
    微信小程序echarts学习记录
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14401532.html
Copyright © 2011-2022 走看看