[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 ...
随机推荐
- Spring4笔记7--AspectJ 对 AOP 的实现
AspectJ 对 AOP 的实现: 对于 AOP 这种编程思想,很多框架都进行了实现.Spring 就是其中之一,可以完成面向切面编程.然而,AspectJ 也实现了 AOP 的功能,且其实现方式更 ...
- Hibernate5笔记4--单表查询
单表查询: Hibernate是DAO层技术,对数据的使用,查询是最为重要的.Hibernate的查询技术非常强大,支持原始SQL语句查询,支持QBC查询及Hibernate特有的HQL查询. H ...
- 【技巧总结】Penetration Test Engineer[4]-Web-Security(文件处理、会话管理、访问控制、SSRF、反序列化漏洞)
Web安全基础2 3.8.文件处理 1)文件上传 一个正常的业务需求,问题在于控制上传合法文件. 防御文件上传 客户端javascript校验(通常校验扩展名) 检查MIME类型 检查内容是否合法 随 ...
- CentOS时区GMT修改为CST
GMT:格林尼标准时间 北京时间=GMT时间+8小时 [root@sa~]# date -R 查看目前服务器的时间标准 [root@sa~]# vi /etc/sysconfig/clock 将ZON ...
- Meltdown论文翻译【转】
转自:http://www.wowotech.net/basic_subject/meltdown.html#6596 摘要(Abstract) The security of computer sy ...
- JVM常用启动参数+常用内存调试工具
一.JVM常用启动参数 -Xms:设置堆的最小值. -Xmx:设置堆的最大值. -Xmn:设置新生代的大小. -Xss:设置每个线程的栈大小. -XX:NewSize:设置新生代的初始值. -XX:M ...
- java基础47 装饰着模式设计
1.装饰者模式 增强一个类的功能,而且还可以让这些装饰类相互装饰 2.装饰者设计模式的步骤 1.在装饰类的内部维护一个被装饰类的引用 2.让装饰者有一个共同的父类或者父接口 3.实例 packa ...
- IPv4的核心管理功能/proc/sys/net/ipv4/*
I /proc/sys/net/ipv4/tcp_syncookies SYN Cookies模块可以在系统随机端口(1024:65535)即将用完时自动启动,用来应对Dos攻击.当启动SYN Coo ...
- SQL Server 2000中查询表名,列名及字段类型
经常碰到一些忘记表名称的情况,此时只记得个大概,此时可通过查询系统表Sysobjects找到所要的表名,如要查找包含用户的表名,可通过以下SQL语句实现, Select * From sysobjec ...
- Python学习笔记:import sys模块(argv、path、platform、exit)
sys模块是Python标准库中自带的一个模块. sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与当前程序之外的系统环境交互,如:Pyth ...