首页 > 其他分享 >CF1656F Parametric MST 题解

CF1656F Parametric MST 题解

时间:2023-04-29 14:22:28浏览次数:51  
标签:le end limits 题解 sum MST na aligned Parametric

为了便于解题,先对 \(a\) 数组从小到大进行排序。

首先,根据定义可以得出总价值的表达式:

\[\begin{aligned} W&=\sum\limits_{(u,v)\in E}[a_ua_v+t(a_u+a_v)]\\ &=\sum\limits_{(u,v)\in E}a_ua_v+t\sum\limits_{(u,v)\in E}(a_u+a_v) \end{aligned} \]

接着,我们需要发现一个比较重要的性质:

  • \(w_{i,j}(t)=a_ia_j+t(a_i+a_j)=(a_i+t)(a_j+t)-t^2\)

也就是说,如果固定一个 \(t\),那么 \(t^2\) 就是定值,可以暂不考虑;\(\forall 1\le i\le n\),如果 \(a_i+t\) 是正数,就向结点 \(1\) 连边以最小化该点的贡献;如果 \(a_i+t\) 是负数,就像结点 \(n\) 连边(如果 \(a_i+t=0\) 那么向哪个点连边都一样)。最后去掉 \(1\) 与 \(n\) 之间的重边,即可构造出正好有 \(n-1\) 条边的最小生成树。

现在来考虑一下无解的情况:

  • 如果 \(\forall 1\le i\le n,a_i+t>0\),那么除了 \(1\) 以外的所有结点向 \(1\) 连边,有

    \[\begin{aligned} W&=\sum\limits_{(u,v)\in E}a_ua_v+t\sum\limits_{(u,v)\in E}(a_u+a_v)\\ &=a_1\sum\limits_{i=2}^na_i+t\left[(n-1)a_1+\sum\limits_{i=2}^na_i\right]\\ \end{aligned} \]

    可以发现,\(W\) 是关于 \(t\) 的一次函数。由于满足 \(\forall 1\le i\le n,a_i+t>0\),所以如果一次项系数 \((n-1)a_1+\sum\limits_{i=2}^na_i>0\),那么当 \(t\rightarrow+\infty\) 时 \(W\rightarrow+\infty\),该函数不存在最大值。

  • 如果 \(\forall 1\le i\le n,a_i+t<0\),同理有:

    \[\begin{aligned} W&=a_n\sum\limits_{i=1}^{n-1}a_i+t\left[(n-1)a_n+\sum\limits_{i=1}^{n-1}a_i\right]\\ \end{aligned} \]

    类似的,如果 \((n-1)a_n+\sum\limits_{i=1}^{n-1}a_i<0\),当 \(t\rightarrow-\infty\) 时,\(W\rightarrow+\infty\),不存在最大值。

综上,如果 \((n-1)a_1+\sum\limits_{i=2}^na_i>0\) 或 \((n-1)a_n+\sum\limits_{i=1}^{n-1}a_i<0\),边权和不存在最大值,直接输出 INF 即可。

现在来考虑有解时如何寻找解。这时我们就需要引入一个新的性质:

  • 如果 \(W\) 能取到最大值,\(-t\) 的值一定是 \(a\) 数组中的其中一个元素的值。

    证明:

    因为一定有解,所以当 \(W\) 取到极值时,\(a_1\le t\le a_n\)(否则函数不收敛,然而先前我们已经判断了无解的情况)。

    当 \(-t\in[a_i,a_{i+1}](1\le i<n)\) 时,最优的连边方式之一是将所有的 \(1\le j\le i\) 向结点 \(n\) 连边(因为这些 \(j\) 满足 \(a_j+t\le 0\)),其他结点向 \(1\) 连边。所以我们可以得到 \(W\) 的表达式:

    \[\begin{aligned} W&=a_n\sum\limits_{j=2}^ia_j+t\left[(i-1)a_n+\sum\limits_{j=2}^ia_j\right]+a_1\sum\limits_{j=i+1}^na_j+t\left[(n-i)a_1+\sum_{j=i+1}^na_j\right] \end{aligned} \]

    (注意到这里 \(1\) 和 \(n\) 之间的边仅仅被连了一次,所以最终不用考虑重边的影响。)

    在这里因为 \(i\) 确定,所以 \(W\) 还是关于 \(t\) 的一次函数,极值必然在 \(-t=a_i\) 或 \(-t=a_{i+1}\) 时取到。命题得证。

接下来只用枚举 \(i=1,2,\ldots,n\),然后令 \(t=-a_i\),将 \(t\) 带入证明中的那个表达式算出 \(W\) 的值。在所有的 \(W\) 中找到 \(W_{\max}\) 并输出即可。

中间那一些求和的式子可以使用前缀和维护。

放代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
main(){
  ios::sync_with_stdio(false);
  int t; cin>>t;
  while(t--){
    int n,c=LLONG_MIN; cin>>n;
    vector<int> a(n),s;
    for(auto &i:a)cin>>i;
    sort(a.begin(),a.end()); // 排序
    partial_sum(a.begin(),a.end(),back_inserter(s)); // 做前缀和
    if(a[0]*(n-2)+s[n-1]>0||a[n-1]*(n-2)+s[n-1]<0)cout<<"INF\n"; // 无解情况
    else{
      for(int i=0;i<n;i++)
        c=max(c,a[0]*(s[n-1]-s[i])-a[i]*(a[0]*(n-i-1)+s[n-1]-s[i])+a[n-1]*(s[i]-s[0])-a[i]*(a[n-1]*i+s[i]-s[0]));
        // 带入表达式计算
      cout<<c<<endl;
    }
  }
  return 0;
}

标签:le,end,limits,题解,sum,MST,na,aligned,Parametric
From: https://www.cnblogs.com/physics212303/p/17363946.html

相关文章

  • P6818 [PA2013]Działka 题解
    P6818[PA2013]Działka前言我太菜了。。。。对着jiangly大佬的题解研究了一下午研究了一下午才搞出来(泪目。作为一个蒟蒻,我就详细的讲一下我对与本题的理解。题意本题的的题意描述的还是比较明了。在二维坐标系中,输入\(n\)个点\(m\)次询问,每次询问,给出一个矩阵,......
  • 天池编程大赛周赛-Character deletion 题解
    题目描述EntertwostringsanddeleteallcharactersinthesecondstringfromthefirststringStringcontainsspaces$1\leqlen(str),len(sub)\leq10^5$示例示例1:Input:str=”Theyarestudents”,sub=”aeiou”Output:”Thyrstdnts”来源:九章算法链接:ht......
  • P3573 [POI2014]RAJ-Rally 题解
    非常好题目,爱来自xc。看到有向无环图,想到拓扑序。通过拓扑序,可以轻松求出以每个点为起点的最长路\(disS\)与每个点为终点的最长路\(disF\)。如何求总共的最长路?在\(disS,disF,disS_u+1+disF_v((u,v)\inE)\)中取最大值即可。注意最后一项,表示将连边的二点值相加。......
  • 题解 CF1264D1
    前言数学符号约定:\(\dbinom{n}{m}\):表示\(n\)选\(m\)。如非特殊说明,将会按照上述约定书写符号。题目分析:考虑题目的问题弱一点的版本,假设此时我们的括号序列是确定的如何求其括号匹配的最深深度。如果你有些许dp基础的话,不难想到如下做法:考虑位置\(i\),将区间\([1,......
  • 题解 CF1264D2
    前言建议大家看一下我对于D1的题解(传送门)后再看本题解,本题解是基于那篇题解的基础上书写的。数学符号约定\(\dbinom{n}{m}\):表示\(n\)选\(m\)。如非特殊说明,将会按照上述约定书写符号。题目分析首先引用一下D1的答案:\(\displaystyle\sum_{i=1}^n\displaystyle\sum_{......
  • [ARC125E] Snack 题解
    不难发现一个较简单的网络流模型:源点向所有糖果\(i\)连\(a_i\)的容量;所有糖果向所有人\(i\)连\(b_i\)的容量;所有人\(i\)向汇点连\(c_i\)的容量。但第二步中建出的边数达到了惊人的\(O(nm)\),显然过不去。考虑优化。从最大流角度优化较困难,由于最大流等价于最小......
  • P4423 题解
    前言题目传送门!更好的阅读体验?刚学分治就来写篇题解纪念一下,其实和平面最近点对一样的(总共四倍经验!)。思路根据P7883的分治思路,这题我们可以考虑用相似的方法解决。首先将点集按\(x\)坐标从小到大排序。然后分治。对于\(\left[l,r\right]\)区间,分治为\(\left[l,mid......
  • 题解 P3225 [HNOI2012] 矿场搭建
    解析传送门一道简单的tarjan题题意:在无向图中找一些点,这些点组成的的点集记为\(V\),使得去掉任意一个点,剩下的每一个点都可以到达\(V\)中任意一个点,求点集\(V\)的大小的最小值及其方案数。去掉一个点,很自然的联想到割点,那么考虑一下割点在不在备选集合中。如图,显然可以看出,......
  • Codeforces Round 868 (Div. 2) A-E题解
    比赛地址这把真不在状态,麻了,看来还得再练A.A-characteristic题意:给出n和k,要求构造只含1和-1数组a,存在k对(i,j)(i≠j),有a[i]*a[j]=1Solution令构造的数组有x个1和y个-1,那么其对于答案的贡献有\[x*(x-1)/2+y*(y-1)/2\]又因为有x+y=n,所以可以转化成关于x的一元二次方程化简后......
  • COMPSCI 589 问题解答
    COMPSCI589Homework4-Spring2023DueMay6,2023,11:55pmEasternTime1InstructionsThishomeworkassignmentconsistsofaprogrammingportion.Whileyoumaydiscussproblemswithyourpeers,youmustanswerthequestionsonyourownandimplementall......