首页 > 其他分享 >Atcoder Grand Contest 016 E - Poor Turkeys

Atcoder Grand Contest 016 E - Poor Turkeys

时间:2023-10-10 22:23:10浏览次数:29  
标签:Poor Atcoder 火鸡 那么 Turkeys int 保留 如果 操作

先思考这样一个问题:对于一只火鸡 \(i\),我们应该如何判断它最后是否能活下来。如果我们正着判断,我们其实并没有足够的证据表明每一次操作我们应该保留哪只火鸡,也就没法判断最终的答案。但是如果我们倒着考虑,我们发现,如果最后一次操作的两个火鸡都不是 \(i\),那么这次操作选啥对答案没有影响,而如果最后一次操作包含 \(i\),那么假设最后一次操作中 \(i\) 之外的那只火鸡为 \(j\),那么在前 \(n-1\) 次操作中,\(j\) 也是要被保留的,这样我们才能将它留到最后一次操作把它杀了,否则最后一次操作杀的就是 \(i\)。同理考虑倒数第二次操作,如果可选对象恰好是 \(i,j\) 两只火鸡,那么 \(i,j\) 必然挂一个,我们就寄了。否则如果 \(i,j\) 在这次操作中都不存在,那么这次操作的结果对最终 \(i\) 的状态没有影响。否则 \(i\)(或者 \(j\))之外的那只火鸡在前 \(n-2\) 次操作中也要被保留。这样我们可以归纳出这样一个判断 \(i\) 是否能被保留的算法:

从后到前考虑所有操作,并维护一个集合 \(S\),初始 \(S=\{i\}\),对于每次操作而言,如果 \(a_k,b_k\) 都在 \(S\) 中就 GG 了,否则如果 \(a_k,b_k\) 恰好一个属于 \(S\),则向 \(S\) 中加入另一个,否则忽略这次操作。如果能顺利遍历所有操作则说明最后 \(i\) 能活下来。

同时结合上面的分析我们也可以知道,如果 \(i\) 可以活下来,那么对应的 \(S\) 中除了 \(i\) 之外的元素也是在保留 \(i\) 的过程中必须干掉的那些火鸡。

接下来考虑怎么判断两个火鸡 \(i,j\) 能不能同时活下来,结论是,如果 \(S_i\cap S_j=\varnothing\),那么 \(i,j\) 可以同时活着。因为显然如果 \(S_i\cap S_j=\varnothing\),那么这俩火鸡的保留过程互不干扰。否则如果某一个火鸡 \(k\) 满足 \(k\in S_i,k\in S_j\) 且 \(k\) 在两个火鸡的保留过程中死亡的时间不一样,说明这是不可能的,否则我们假设 \(k\) 是所有这样的火鸡中死亡时间最晚的,那么假设其死亡时间为 \(t\),那么我们发现 \(a_t,b_t\) 中不同于 \(k\) 的那一者 \(k'\) 也满足 \(k'\in S_i,k'\in S_j\),且其死亡时间更晚,矛盾。

这样判断是容易的,时间复杂度 \(O(n^3+nm)\)。

const int MAXN=400;
const int MAXM=1e5;
int n,m,a[MAXM+5],b[MAXM+5],res;
bitset<MAXN+5>c[MAXN+5];bool die[MAXN+5];
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)scanf("%d%d",&a[i],&b[i]);
	for(int i=1;i<=n;i++){
		c[i].set(i);
		for(int j=m;j;j--){
			if(c[i][a[j]]&&c[i][b[j]]){die[i]=1;break;}
			else if(c[i][a[j]]&&!c[i][b[j]])c[i][b[j]]=1;
			else if(!c[i][a[j]]&&c[i][b[j]])c[i][a[j]]=1;
		}
	}
	for(int i=1;i<=n;i++)for(int j=1;j<i;j++)res+=(!die[i]&&!die[j]&&!(c[i]&c[j]).count());
	printf("%d\n",res);
	return 0;
}

标签:Poor,Atcoder,火鸡,那么,Turkeys,int,保留,如果,操作
From: https://www.cnblogs.com/tzcwk/p/agc016E.html

相关文章

  • AtCoder Regular Contest 166——A - Replace C or Swap AB
    题目描述  中文题目描述每个字符串的长度为N,由A,B和C组成。通过对X执行以下三种操作任意次数(可能为零),确定是否有可能使X与y重合。 操作(1):选择X中的字符C替换为字符A。操作(2):在X中选择字符C替换为字符B。操作(3):选择X中的子字符串AB,替换为BA。更正式地说,选择......
  • AtCoder Beginner Contest 323 (ABC 323) D、E、F 题解
    AtCoderBeginnerContest323(ABC323)D、E、F题解D题目大意给\(n\)种数\(s_i\),每一种数有\(c_i\)个,每次可以把两个相同的数合并为一个数,问最后会剩下多少数?分析对于每一个数\(s_i\),它最多被分解\(log_2c_i\)次,并且合并出来最大的数的大小小于\(s_i\timesc_i......
  • AtCoder Beginner Contest 323
    E-Playlist首先需要算出第x+0.5秒后,第一首歌播放的概率1.要在x+0.5秒后播放第一首,需要在x,x-1,x-2,...,x-t[1]+1,时就要开始播放第一首,并且概率是1/n,概率之和除以n2.概率dp,dp[i]表示播放i的概率,那么可以转换成,dp[i]+=dp[i-j]/n%mod(i>=t[j])3.答案就是x,x-1,...,x-t[1]+1概率之和......
  • UNIQUE VISION Programming Contest 2023 Autumn(AtCoder Beginner Contest 323)
    UNIQUEVISIONProgrammingContest2023Autumn(AtCoderBeginnerContest323)A.WeakBeats解题思路:按题意模拟即可。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;voidsolve(){strings;cin>>s;intn=s.size();......
  • AtCoder Beginner Contest 323
    有的人边上课边打abcA-WeakBeats(abc323A)题目大意给定一个\(01\)字符串,问偶数位(从\(1\)开始)是否全为\(0\)。解题思路遍历判断即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdio......
  • AtCoder Grand Contest 057 E RowCol/ColRow Sort
    洛谷传送门AtCoder传送门首先考虑一个经典的套路:转\(01\)。具体而言,我们考虑若值域是\([0,1]\)怎么做。发现可以很容易地判定一个\(A\)是否合法。设矩阵第\(i\)行的和为\(r_i\),第\(j\)列的和为\(c_j\),那么合法当且仅当\(A\)的\(\{r_i\}\)和\(\{c_j\}\)(可重集......
  • AtCoder Grand Contest 036 F Square Constraints
    洛谷传送门AtCoder传送门本质是\(p_i\in[l_i,r_i]\)的计数问题。当\(1\lei\len\)时,\(l_i\)才可能不等于\(1\)。考虑容斥,设钦定\(m\)个不满足条件(上界为\(l_i-1\)),其余任意(上界为\(r_i\))。然后按照上界排序后dp,设\(f_{i,j}\)为考虑前\(i\)个元素,已经......
  • AtCoder Beginner Contest 288 Ex A Nameless Counting Problem
    洛谷传送门AtCoder传送门考虑到规定单调不降比较难搞。先设\(g_t\)为长度为\(t\)的满足条件的序列个数(可重且有顺序)。求这个可以设个dp,\(f_{d,i}\)表示考虑到从高到低第\(d\)位,当前\(t\)个数中有\(i\)个仍然顶上界,并且之前的位都满足异或分别等于\(X\)的限制。......
  • Atcoder abl c
    传送门题目描述有n个城市,m条双向路的图,问你最少添加几条路使得任意两个城市可以两两到达?样例样例输入3112样例输出:1题目解析这是个双向路的图,我们可以把它当成一个非连通图。在各个点之间有连线,要求我们算出如何能将整个图的各个部分连接起来。那么,我们只要算出这个......
  • AtCoder——第一题
    AtCoderBeginnerContest322FVacationQuery题目大意处理01字符串,给定Q次询问,询问区间内最长连续1的字符个数题目理解使用线段树维护区间需要使用懒标记下传修改信号线段树要维护7个信息(区间的最长连续1的个数、区间左端点开始连续1的个数、区间左端点开始连续0的个数......