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但是确实挺锻炼思维的
一开始以为是用并查集之类的东西维护
然后想了好久还是煤油想出来
正解是一个递推?模拟?贪心?
维护n个集合
我们设\(f[i][j]\)表示如果要让\(i\)活到最后\(j\)应不应该死
可以考虑时间倒流
一开始\(f[i][i]=true\)
然后倒着循环操作
如果两只鸡有一只已经死了,那么另一只在这回合必须死
如果两只鸡有两只都活着,就随便死一个
如果两个都死了,那么这个鸡\(i\)就只能死了
最后查询的时候如果两个集合有交集
那这两只鸡就不能同时活到最后
因为如果有交集说明有一个鸡同时要给两只鸡当挡箭牌
但是一只鸡只能死一次
统计一下答案就好辣
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
# define LL long long
const int M = 405 ;
const int N = 100005 ;
using namespace std ;
inline int read() {
char c = getchar() ; int x = 0 , w = 1 ;
while(c>'9'||c<'0') { if(c=='-') w = -1 ; c = getchar() ; }
while(c>='0'&&c<='9') { x = x*10+c-'0' ; c = getchar() ; }
return x*w ;
}
LL Ans ;
int n , m ;
int a[N] , b[N] ;
bool f[M][M] , die[M] ;
int main() {
n = read() , m = read() ;
for(int i = 1 ; i <= m ; i ++)
a[i] = read() , b[i] = read() ;
for(int i = 1 ; i <= n ; i ++) {
f[i][i] = true ;
for(int j = m ; j >= 1 ; j --) {
bool x = f[i][a[j]] , y = f[i][b[j]] ;
// x : 目前a[j]是否死了
// y : 目前b[j]是否死了
if(x & y) { die[i] = true ; break ; }
else if(x) f[i][b[j]] = true ;
else if(y) f[i][a[j]] = true ;
}
}
for(int i = 1 , tot ; i < n ; i ++) {
if(die[i]) continue ;
for(int j = i + 1 ; j <= n ; j ++) {
if(die[j]) continue ;
tot = 1 ;
for(int k = 1 ; k <= n ; k ++)
if(f[i][k] & f[j][k])
tot = 0 ;
Ans += tot ;
}
}
cout << Ans << endl ;
return 0 ;
}
AGC16E Poor Turkeys的更多相关文章
- [AGC016E]Poor Turkeys
[AGC016E]Poor Turkeys 题目大意: 有\(n(n\le400)\)只火鸡,编号为\(1\)到\(n\),有\(m(m\le10^5)\)个人,每人指定了两只火鸡\(x\)和\(y\ ...
- 【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\),每 ...
- 【AtCoder】AGC016
A - Shrinking 用每个字母模拟一下就行 #include <bits/stdc++.h> #define fi first #define se second #define ...
- NOIp2018模拟赛三十三
神奇的一场... 成绩:100+0+14=114 A题是个体面很恐怖的题...然而看懂题意之后转化一下就变成了一道暴力傻逼题...但是不知道为什么dalao们都没写,讲题的时候挺尴尬的...yrx“瞄 ...
- AGC016题解
呼我竟然真的去刷了016QwQ[本来以为就是个flag的233] 感觉AGC题目写起来都不是很麻烦但是确实动脑子qvq[比较适合训练我这种没脑子选手] 先扔个传送门:点我 A.Shrinking 题意 ...
- 关于过拟合、局部最小值、以及Poor Generalization的思考
Poor Generalization 这可能是实际中遇到的最多问题. 比如FC网络为什么效果比CNN差那么多啊,是不是陷入局部最小值啊?是不是过拟合啊?是不是欠拟合啊? 在操场跑步的时候,又从SVM ...
- vmware mysql报kernel: EXT4-fs (dm-0): Unaligned AIO/DIO on inode 1055943 by mysqld; performance will be poor
kernel: EXT4-fs (dm-0): Unaligned AIO/DIO on inode 1055943 by mysqld; performance will be poor
随机推荐
- 网络编程进阶:并发编程之协程、IO模型
协程: 基于单线程实现并发,即只用一个主线程(此时可利用的CPU只有一个)情况下实现并发: 并发的本质:切换+保存状态 CPU正在运行一个任务,会在两种情况下切走去执行其他任务(切换有操作系统强制控制 ...
- Thinkphp5.0 的视图view的循环标签
Thinkphp5.0 的视图view的循环标签 volist标签: <!-- 使用volist --> <!-- name是传递过来的要循环变量名 --> <!-- k ...
- ZOJ 2770_Burn the Linked Camp
题意: 给定每个兵营的最大容量,以及第i到第j个兵营至少有多少个士兵,问所有兵营一共至少有多少个士兵? 分析: 差分约束系统,注意 第i到第j至少有k个 第i到第j最多有最大容量之和个 每个兵营至少有 ...
- Delphi ADO的Lookup类型字段的问题
关于ADO数据集控件中的Lookup类型字段,在其Lookupkeyfields属性指向的字段中存在NULL值的,就会出现'EOleException with message '发生未知错误',这个 ...
- 洛谷 P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- Ubuntu 16.04下搭建基于携程Apollo(阿波罗)配置中心单机模式
官网:https://github.com/ctripcorp/apollo Wiki:https://github.com/ctripcorp/apollo/wiki(一切的集成方式和使用方法都在这 ...
- hbase definitive guide 笔记
ext3 file system 优化 ext3 在用在hbase上可以做如下优化: 1. mount的时候加上noatime选项.这可以减少管理开销 2. 用命令tune2fs -m 0 /dev/ ...
- formData 对象
(1)创建的formData打印为空? var edition=$("#edinum").val();//版本号 var uploader=$("#upman" ...
- react 项目实战(六)提取布局组件
重复代码是混乱的根源!,本篇文章我们来继续消灭重复代码. 目标 细心的同学应该能发现:每一个Page组件(/src/pages下的组件)的render方法都拥有相似的jsx结构,比如: render ...
- android:省市县三级联动(基于json和spring)
一.请看效果图": 二.程序的代码: 1.MainActivity.java package com.loveplusplus.loader.demo.ui; import org.json ...