[AGC016E]Poor Turkeys
[AGC016E]Poor Turkeys
题目大意:
有\(n(n\le400)\)只火鸡,编号为\(1\)到\(n\),有\(m(m\le10^5)\)个人,每人指定了两只火鸡\(x\)和\(y\)。
- 若\(x\)和\(y\)都活着,那么这个人将会等概率地随机吃掉一只。
- 若\(x\)和\(y\)恰好活着一只,那么这个人将会吃掉活着的这只。
- 若\(x\)和\(y\)都已经死亡,那么只好什么都不做。
求有多少个\((i,j)(1\le i<j\le n)\)满足存在至少一种吃鸡方案使得在最终时刻第\(i\)只火鸡和第\(j\)只火鸡都还活着。
思路:
用bitset维护若第\(i\)只火鸡活着,则哪些鸡一定要牺牲的集合\(S_i\)。
维护\(S_i\)时,倒序枚举\(m\sim 1\),对于当前的\(x,y\):
- 若\(|\{x,y\}\bigcap S_i|=0\),则\(x,y\)都可以存活;
- 若\(|\{x,y\}\bigcap S_i|=1\),则\(x,y\)都不能存活;
- 若\(|\{x,y\}\bigcap S_i|=2\),则\(i\)本身都不能存活。
最后枚举\(i,j\),若\(S_i\bigcup S_j=\varnothing\),则两只鸡可以同时存活。
时间复杂度\(\mathcal O(\frac{n^2m+n^3}\omega)\)。
源代码:
#include<cstdio>
#include<cctype>
#include<bitset>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=401,M=1e5+1;
bool die[N];
int x[M],y[M];
std::bitset<N> b[N];
int main() {
const int n=getint(),m=getint();
for(register int i=1;i<=m;i++) {
x[i]=getint(),y[i]=getint();
}
int ans=0;
for(register int i=1;i<=n;i++) {
b[i][i]=true;
for(register int j=m;j>=1;j--) {
if(b[i][x[j]]&&b[i][y[j]]) b[i].set();
if(b[i][x[j]]) b[i][y[j]]=true;
if(b[i][y[j]]) b[i][x[j]]=true;
}
for(register int j=1;j<i;j++) {
if((b[i]&b[j]).count()==0) ans++;
}
}
printf("%d\n",ans);
return 0;
}
[AGC016E]Poor Turkeys的更多相关文章
- 2017国家集训队作业[agc016e]Poor Turkey
2017国家集训队作业[agc016e]Poor Turkey 题意: 一开始有\(N\)只鸡是活着的,有\(M\)个时刻,每个时刻有两个数\(X_i,Y_i\),表示在第\(i\)个时刻在\(X_i ...
- 【AGC016E】Poor Turkeys
Description 有\(n\)(\(1 \le n \le 400\))只鸡,接下来按顺序进行\(m\)(\(1 \le m \le 10^5\))次操作.每次操作涉及两只鸡,如果都存在则随意拿 ...
- Atcoder AGC016 E Poor Turkeys
比赛的时候口胡这道题口胡了一年,看完题解被教做人 题意:有n只火鸡,m个猎人按序来杀火鸡,从自己预先选的两只中杀一只,问有多少火鸡对可以同时存活 考虑对于每一只火鸡i,按时间逆序维护一个最小的集合Si ...
- AtCoder Grand Contest 016 E - Poor Turkeys
题目传送门:https://agc016.contest.atcoder.jp/tasks/agc016_e 题目大意: 有\(N\)只火鸡,现有\(M\)个人,每个人指定了两只火鸡\(x,y\),每 ...
- AGC16E Poor Turkeys
输入样例: 10 10 8 9 2 8 4 6 4 9 7 8 2 8 1 8 3 4 3 4 2 7 输出样例#6: 5 话说这题虽然不是很OI但是确实挺锻炼思维的 一开始以为是用并查集之类的东西维 ...
- NOIp2018模拟赛三十三
神奇的一场... 成绩:100+0+14=114 A题是个体面很恐怖的题...然而看懂题意之后转化一下就变成了一道暴力傻逼题...但是不知道为什么dalao们都没写,讲题的时候挺尴尬的...yrx“瞄 ...
- 【AtCoder】AGC016
A - Shrinking 用每个字母模拟一下就行 #include <bits/stdc++.h> #define fi first #define se second #define ...
- AGC016题解
呼我竟然真的去刷了016QwQ[本来以为就是个flag的233] 感觉AGC题目写起来都不是很麻烦但是确实动脑子qvq[比较适合训练我这种没脑子选手] 先扔个传送门:点我 A.Shrinking 题意 ...
- 关于过拟合、局部最小值、以及Poor Generalization的思考
Poor Generalization 这可能是实际中遇到的最多问题. 比如FC网络为什么效果比CNN差那么多啊,是不是陷入局部最小值啊?是不是过拟合啊?是不是欠拟合啊? 在操场跑步的时候,又从SVM ...
随机推荐
- go 函数举例练习
1. 求1到100之内的所有质数,并打印到屏幕上 package main import "fmt" // 求1-100 内的质数 func justfy(i int) bool ...
- Linux Kernel sys_call_table、Kernel Symbols Export Table Generation Principle、Difference Between System Calls Entrance In 32bit、64bit Linux【转】
转自:http://www.cnblogs.com/LittleHann/p/4127096.html 目录 1. sys_call_table:系统调用表 2. 内核符号导出表:Kernel-Sym ...
- a标签、img图片、iframe、表单元素、div
1.<a href="http://www.baidu.com" target=''_blank">百度</a> 超链接标签 2.<img ...
- JavaScript新手学习笔记(一)
1.JavaScript 对大小写敏感. JavaScript 对大小写是敏感的. 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getElementById 与 getE ...
- JavaScript 简单吗
英文:Aurélien Hervé 译文:众成翻译/msmailcode 这里有一些 Javascript初学者应该知道的技巧和陷阱.如果你已经是专家了,顺便温习一下. Javascript也只不过 ...
- python基础-类的封装
封装:类中封装了公有属性和方法,对象封装了私有属性的值 class F1: def __init__(self,n): self.N=n print('F') class F2: def __init ...
- Linux基础 - tmux
安装 yum install tmux 类似vim当中存在命令行模式以及编辑模式,从编辑模式进入命令行模式需要先按ESC键,在tmux当中进行操作也要先准备好"姿势"再操作,默认情 ...
- windows下redis服务操作
安装redis服务redis-server --service-install redis.windows.conf --service-name Redis26380 --loglevel verb ...
- java解析Xml格式的字符串
最近在工作中,需要调别的接口,接口返回的是一个字符串,而且内容是xml格式的,结果在解析json的时候报错,最终修改了接口的返回方式,以Map返回, 才得以接收到这个xml的字符串,然后通过dom4j ...
- .gitignore文件如何编写?
.gitignore文件即 项目中不需要被追踪(track)且上传到git系统的文件 <1>忽略文件的原则 a.忽略操作系统自动生成的文件,比如缩略图等 b.忽略编译生成的中间文件.可执行 ...