首页 > 其他分享 >ARC117F Gateau 题解

ARC117F Gateau 题解

时间:2024-07-24 10:19:30浏览次数:10  
标签:ARC117F min 题解 leq 蓝边 Gateau ans 2N 边权

ARC117F Gateau 题解

题解区好像都没有对 dp 详细解释,本文将稍细致地说一说 dp 部分。

题目大意

给定一个长度为 \(2N\) 的环,环上每个节点有属性值 \(B_i\ (i=0,\dots,2N-1)\) 和 \(2N\) 个限制,第 \(i\) 个限制形如 \(\sum\limits_{j=i}^{i+N-1}B_j\geq A_i\),向环上的节点赋值,使得 \(B\) 满足全部 \(m\) 个限制,且 \(\sum\limits_{i=0}^{2N-1}B_i\) 最小。

Solve

前置芝士:差分约束。

考虑扩环成链,在链尾添加一个等价于 \(0\) 节点的编号为 \(2N\) 的节点,并令 \(S\) 为 \(B\) 的前缀和序列,则限制转化到 \(S\) 上。

设 \(ans=\sum\limits_{i=0}^{2N-1}B_i\),则:

  • \(S_{2N}-S_0=ans\),即连一条从 \(0\) 到 \(2N\) 的边权为 \(ans\) 的有向边和一条边权为 \(-ans\) 的反向边。

  • 对于 \(1\leq i\leq N+1\),限制转化为:\(S_{i+N-1}-S_{i-1}\geq A_i\iff S_{i-1}-S_{i+N+1}\leq -A_i\),即连一条从 \(i+N+1\) 到 \(i-1\) 的边权为 \(-A_i\) 的有向边。

  • 对于 \(N+1 \leq i \leq 2N\),限制转化为: \(S_{2N}-S_{i-1}+S_{N-(2N-i+1)=i-N-1}-S_0\geq A_i\iff S_{i-1}\leq S_{i-N-1}+ans-A_i\),即连一条从 \(i-N-1\) 到 \(i-1\) 的边权为 \(ans-A_i\) 的有向边。(这种情况相当于,把 \(i-1\sim i-N-1\) 都赋值过之后,要给其他地方留至少 \(A_i\))

  • 最后,别忘了对于 \(1\leq i\leq 2N\),都有 \(S_i\geq S_{i-1}\),即连一条从 \(i\) 到 \(i-1\) 的边权为 \(0\) 的有向边。

建出的图长这个样子,以 \(N=3\) 为例。

红边为负边权,从右到左,蓝色为正边权,从左到右。

接下来,考虑二分 \(ans\),若有负环则不合法。

二分下界应取 \(\max\limits_{i=1}^N\{A_i+A_{i+N}\}\),这样可以免去二元环的考虑。

用 \(\text{SPFA}\) 判负环是 \(O(nm)\) 的,不可行,考虑手动找负环。

负环一定由一些红边和蓝边组成,分两种情况:蓝红蓝(先蓝后红),红蓝红(先红后蓝)。

记以 \(i\) 为起点的蓝边边权为 \(e1_i\),以 \(i\) 为终点的红边边权为 \(e2_i\)。

  • 对于先蓝后红,设 \(f_{i,0/1}\) 表示前 \(i\) 个节点,当前这一步是【(先走红边到前面)从 \(i\) 往右走蓝边 / 前面走蓝边跳到了 \(i\) 右边又走红边走回 \(i\)】的最小环,有转移方程:

\[f_{i,0}=\min\{f_{i-1,0},e1_i,f_{i-1,1}+e1_i\}\\ f_{i,1}=\min\{f_{i-1,1},f_{i-1,0}+e2_i\} \]

  • 对于先红后蓝,类似地,设 \(g_{i,0/1}\) 表示前 \(i\) 个节点,当前这一步是【(先走红边到前面)从 \(i\) 往右走蓝边 / 前面走蓝边跳到了 \(i\) 右边又走红边走回 \(i\)】的最小环,有转移方程:

\[g_{i,0}=\min\{f_{i-1,0},f_{i-1,1}+e1_i\}\\ g_{i,1}=\min\{f_{i-1,1},e2_i,f_{i-1,0}+e2_i\} \]

两种情况有什么区别呢?

对于 \(f\),我们规定在走红边之前必须至少走一条蓝边,所以我们的 \(f_{i,1}\) 不能与 \(e2_i\) 取 \(\min\),但 \(f_{i,0}\) 可以与 \(e1_i\) 取 \(\min\),即可以让蓝边与黑边单独成环。

对于 \(g\),我们规定在走蓝边之前必须至少走一条红边,所以我的们的 \(g_{i,0}\) 不能与 \(e1_i\) 取 \(\min\),而 \(g_{i,1}\) 可以与 \(e2_i\) 取 \(\min\),即可以让红边单独成环。

有一个问题:红边怎么单独成环?只需要最后走最上边那条蓝边即可,处理也十分容易,让最后的 \(g_{n,1}\) 加上 \(ans\) 就行了。

全图的最小环即为 \(\min\{f_{n,0},g_{n,1}+ans\}\),因为前 \(n\) 个点经过往又跳再跳回来的操作就一定包含了所有情况。

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read()
{
	int x=0;
	short f=1;
	char c=getchar();
	while(c<'0'||c>'9')	{if(x=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9')	x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}
const int N=1.5e5+10,M=3e5+10,inf=1e18;
int l,r=inf,n,a[M],m,mid,f[M][2],g[M][2];
int e1[M]/*正边*/,e2[M]/*负边*/;
inline bool chk()
{
	for(int i=0;i<=n;i++)	e1[i]=mid-a[i+n+1];
	f[0][0]=e1[0];f[0][1]=inf;
	g[0][0]=inf;g[0][1]=e2[0];
	for(int i=1;i<=n;i++)
	{
		f[i][0]=min(f[i-1][0],e1[i]);
		f[i][0]=min(f[i][0],f[i-1][1]+e1[i]);
		f[i][1]=min(f[i-1][1],f[i-1][0]+e2[i]);
		g[i][1]=min(g[i-1][1],e2[i]);
		g[i][1]=min(g[i][1],g[i-1][0]+e2[i]);
		g[i][0]=min(g[i-1][0],g[i-1][1]+e1[i]);
	}
	return f[n][0]>=0&&g[n][1]+mid>=0;
}
signed main()
{
	n=read();m=n<<1;
	for(int i=0;i<m;i++)	a[i]=read();
	a[m]=a[0];a[m+1]=a[1];
	for(int i=0;i<=n;i++)	e2[i]=-a[i+1];
	for(int i=1;i<=n;i++)	l=max(l,a[i]+a[i+n]);
	while(l<r)
	{
		mid=l+r>>1;
		if(chk())	r=mid;
		else	l=mid+1;
	}
	return printf("%lld",l),0;
}

标签:ARC117F,min,题解,leq,蓝边,Gateau,ans,2N,边权
From: https://www.cnblogs.com/sorato/p/18320251

相关文章

  • 【保奖思路】2024年华为杯研究生数学建模D题解题思路分享(点个关注,后续会更新
    您的点赞收藏是我继续更新的最大动力!一定要点击如下的卡片链接,那是获取资料的入口!点击链接加入群聊【2024华为杯研赛资料汇】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=MwNruKbEvR9aZns1l7xXBWmQQKYAEh-F&authKey=igaBN79pz6BhNlDQ6TIZ5YFAbn71aDcYL77uANPquLF%2FTVgeSAhEZ......
  • 题解|2024暑期牛客多校03
    【原文链接】比赛链接:2024牛客暑期多校训练营3A.BridgingtheGap2题目大意nnn个人过河,第i......
  • P10280 [USACO24OPEN] Cowreography G 题解
    Description奶牛们组了一支舞蹈队,FarmerJohn是她们的编舞!舞蹈队最新而最精彩的舞蹈有\(N\)头奶牛(\(2\leN\le10^6\))排成一行。舞蹈中的每次动作都涉及两头奶牛,至多相距\(K\)个位置(\(1\leK<N\)),优雅地跳起并降落在对方的位置上。队伍中有两种奶牛——更赛牛(Guernsey)和荷......
  • 基因改造 题解
    前言题目链接:Hydro&bzoj。题意简述求匹配串\(S\)中和模式串\(T\)匹配的子串。两个串被定义为匹配的,当且仅当一个串任意交换字符后和另一个串相等。例如\(\texttt{12321}\)和\(\texttt{21312}\)匹配,因为前者交换\(\texttt{1}\)和\(\texttt{2}\)后与后者等价。当然......
  • CF521E Cycling City 题解
    Description给定一张\(n\)个点\(m\)条边的无向简单图。问图中能否找到两个点,满足这两个点之间有至少三条完全不相交的简单路径。\(n,m\le2\times10^5\),图不保证连通。Solution容易发现有解地充要条件是存在两个环有边交,考虑在dfs树上做这件事。注意到非树边一定......
  • CF1990F Polygonal Segments 题解
    题目链接:https://codeforces.com/contest/1990/problem/F赛时想到了一个略显抽象的做法,但因为写反了一个判断导致没能过掉。赛后调参卡过,用时\(3.5/8\)秒。为了不丢失这个idea最终还是决定写个题解记录一下。题意简述给定一个数组\(a_{1..n}\),执行以下查询:查询区间\([......
  • 题解:P10800 「CZOI-R1」卡牌
    \(\text{Link}\)最近做的最神金的一道数据结构题。题意给出\(m\)个值域为\([1,n]\)的四元组\(t_{i,0\sim3}\),定义四元组\(A\)胜于四元组\(B\)当且仅当最多存在一个\(j\in[0,3]\)使得\(A_j\leB_j\),求出有多少个值域为\([1,n]\)的四元组\(A\)胜于所有的\(t_{1......
  • 题解:P10717「KDOI-05」简单的树上问题
    \(\text{Link}\)题意给你一颗\(n\)个结点的树,有\(k\)次操作,第\(i\)次操作:每个点初始都处于未激活状态;以\(p_{i,j}\)的概率激活点\(j\);对于每个未激活的点\(i\),如果存在激活的结点\(j,k\)且\(i\)在\(j\)到\(k\)的路径上,则\(i\)也会被激活。给出\(v_{i......
  • NOI2024 题解
    D2T3树形图首先判掉一些case将任意一个\(1\)类点定为根,求出一棵dfs树,则图上的非树边只有返祖边,没有横叉边。\(1\)类点考虑在这棵dfs树的基础上求出所有\(1\)类点:考虑\(fa_u\tou\)这条边被几条返祖边覆盖了,由于这是一个强连通分量,所以子树中至少有一条返祖边覆......
  • 题解:CF1992F Valuable Cards
    Part1:前言题目翻译在他最喜欢的咖啡馆里,Kmes再次想尝尝皮草大衣下的鲱鱼。以前,这对他来说并不难,但咖啡馆最近推出了一项新的购买政策。现在,为了进行购买,Kmes需要解决以下问题:在他面前摆放着\(n\)张不同价格的卡,第\(i\)张卡的价格为\(a_i\),在这些价格中没有整数\(x\)。K......