其他分享
首页 > 其他分享> > 2020.09.29pm

2020.09.29pm

作者:互联网

2021.09.29PM

预期 实际
A 100 100
B 100 100
C 10 20
D 0 10
S 210 230

可能水,一定菜

A 满汉全席\(\blacktriangle\!\blacktriangledown\!\blacktriangle\)

  1. 才明白这个成语啥意思。
  2. 还是之前那句话,用 \(Tarjan\) 的紫题都很水。
  3. 这道题由于食材要么用于做汉式要么做满式就能联想到 \(2-SAT\)。
  4. 同时评委会给出更多的约束条件,那就更是 \(2-SAT\) 了。
  5. 每个评委不做第一道菜(或者说用该种食材做了另一种菜)必须做第二道菜;不做第二道菜必须做第一道菜,最后检查是否同一个食材又要做汉式又要做满式,跑 \(Tarjan\) 找强连通分量即可。
  6. \(P.S.\) 考试的时候我其实不是这样写的。我设的状态更多(做汉式,不做汉式,做满式,不做满式,变成两个点,食材也变成约束关系),但其实问题也不大,只要理得清矛盾关系,不漏掉矛盾关系就问题不大。

B 部落划分 \(\blacktriangle\!\blacktriangledown\)

  1. 好家伙,最小生成树没想出来,倒是用之前口胡的常数更大的方法做的····。
  2. 先说考试时候的方法吧——二分最大距离。
    • 我们把所有小于等于最大距离的边都建上,同时用并查集维护看最后有几个连通块。
    • 如果连通块数目大于等于 \(k\) 说明成立,反之不成立。(大于 \(k\) 可以把几个连通块合并,不会使距离变小)
  3. 再说最小生成树吧,这道题只能说用了最小生成树的思路。
    • 先建当前最短的边,直到当前只有 \(k\) 个连通块。
    • 正确性显然。

C 冷冻波 \(\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\)

  1. 不仅不会做,而且不会做。

D 蔬菜庆典\(\blacktriangle\!\blacktriangledown\!\blacktriangle\)

  1. 笑死,比赛时心想最后一道,大抵整不动,样例都没分析····要是分析一下说不定就整出来了?。
  2. 这个地方有个离谱的地方:+inf要分开算,导致解题要分成两个部分,让人十分难受。

Part 1 +inf

	void dfs(int x,int fa){//全是单向边
	if(out[x]){//不是叶子节点
		if(change[fa])change[x]=1;//父亲能变则自己能变
		for(int i=head[x];i;i=e[i].nx){
			int y=e[i].b;
			if(v[y]+v[fa]!=2*v[x])change[x]=1;//自己的值能变化
			dfs(y,x);
			if(change[y])change[x]=1;//儿子能变自己能变
			if(pan)return;//+inf
		}
	}
	if(out[x]>1)//不是一条链
		for(int i=head[x];i;i=e[i].nx){
			int y=e[i].b;
			if(change[y]||v[y]!=v[e[head[x]].b]){pan=1;return;}//儿子有不同值
		}
}

Part 2 ans

image
\(\cal {Made} \ {by} \ {YuGe}\)

标签:2020.09,head,int,son,fa,blacktriangledown,blacktriangle,29pm
来源: https://www.cnblogs.com/u2003/p/15356307.html