[NOIP10.5模拟赛]3.c题解--思维
题目链接
这次不咕了
https://www.luogu.org/problemnew/show/AT2389
闲扯
考场20分爆搜走人 \cy
话说这几天T3都很考验思维啊
分析
我们先钦定一只鸡(虽然考试时是苹果但是我觉得杀鸡更亲切(因为我们某位同学))先必须活着,所以呢我们需要逆着倒推每一组关系,然后把为了保证我们钦定的鸡活着必须杀的鸡放进一个集合,为了方便表示用\(f[now][i]=1/0\)表示钦定第now只鸡活着第\(i\)只鸡最终有没有加入集合;
对于一对关系\((a,b)\),如果\(f[now][a]=1\),那么\(f[now][b]\)显然必须置为1加入集合,因为a这只鸡为了保证now不被杀掉已经在一条边中被杀掉,为了保证当前这条边合法则必须杀掉b(注意关系是倒着枚举的)
但这是有个问题,就是如果\(f[now][a]\)&\(f[now][b]=1\)说明关系矛盾,\(now\)必须死,为啥?

我们考虑没有这种情况,将鸡视为点,关系视为边,显然我们的集合实际上是一个以now为根节点的树,而且满足\(x\)到\(fa[x]\)的关系比\(fa[x]\)到\(fa[fa[x]]\)的边次序要早(但是在枚举时因为是倒着枚举是先构成前者)
如果这时候加入一条边连接两个已经在集合中的点\((a,b)\),由于1号边次序要比2,3边早,所以先必须在a,b中选一个杀死满足1号边的关系.但是我们为了让now不死,我们必须要让a点因为2号边死去,b因为3号边死去.出现了这种情况显然就不可能了,所以需要记录一下\(now\)存活是不可行的
最后假设已经遍历完,获得钦定每个点活着的时候要杀掉的鸡的集合(虽然不一定合法)
然后对于每一只鸡判断是否能与编号靠后的另一只鸡一起存活,怎么判断呢?
首先如果如果其中有只鸡本身无法存活则特判continue,但是还有种非法的情况,就是存在一只鸡为了满足\(a\)活必须死,又同时满足\(b\)活下来也必须死.这样的话\(a,b\)无法同时存活
这其实很显然的,边有先后顺序,你为了满足其中一只鸡另一只鸡就一定不可行,所以这种情况我们可以把两个鸡的集合并起来看看有没有1存在
代码
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cctype>
#include <iostream>
#include <bitset>
#define ll long long
#define ri register int
using std::min;
using std::bitset;
using std::max;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;return ;
}
const int maxn=405;
const int inf=0x7fffffff;
bitset <maxn> o[maxn];
bool ok[maxn];
int a[100005],b[100005],m,n;
int main(){
int x,y;
bool flag=0;
read(n),read(m);
for(ri i=1;i<=m;i++)read(a[i]),read(b[i]);
for(ri i=1;i<=n;i++){
o[i][i]=1;flag=0;
for(ri j=m;j>=1&&!flag;j--){
x=o[i][a[j]],y=o[i][b[j]];
if(x&y){
ok[i]=1;
flag=1;continue;
}
if(x){o[i][b[j]]=1;}
if(y){o[i][a[j]]=1;}
}
}
ll ans=0;
for(ri i=1;i<=n;i++){
if(ok[i])continue;
for(ri j=i+1;j<=n;j++){
if(ok[j])continue;
if(!((o[i]&o[j]).any()))ans++;
}
}
printf("%lld\n",ans);
return 0;
}
[NOIP10.5模拟赛]3.c题解--思维的更多相关文章
- [NOIP10.4模拟赛]3.z题解--思维
题目链接: 咕咕 闲扯: 哈哈这道T3考场上又敲了5个namespace,300+行,有了前车之鉴还对拍过,本以为子任务分稳了 结果只有30分哈哈,明明用极限数据对拍过不知怎么回事最后数据又是读不全, ...
- [NOIP10.6模拟赛]1.merchant题解--思维+二分
题目链接: while(1)gugu(while(1)) 闲扯 考场上怕T2正解写挂其他两题没管只打了暴力,晚上发现这题思维挺妙的 同时想吐槽出题人似乎热衷卡常...我的巨大常数现在显露无疑QAQ 分 ...
- [NOIP10.6模拟赛]2.equation题解--DFS序+线段树
题目链接: 咕 闲扯: 终于在集训中敲出正解(虽然与正解不完全相同),开心QAQ 首先比较巧,这题是\(Ebola\)出的一场模拟赛的一道题的树上强化版,当时还口胡出了那题的题解 然而考场上只得了86 ...
- [NOIP10.3模拟赛]3.w题解--神奇树形DP
题目链接: 咕 闲扯: 这题考场上把子任务都敲满了,5个namespace,400行11k 结果爆0了哈哈,因为写了个假快读只能读入一位数,所以手测数据都过了,交上去全TLE了 把边分成三类:0. 需 ...
- [NOIP10.5模拟赛]1.a题解--离散化+异或线段树
题目链接: 咕咕咕 https://www.luogu.org/problemnew/show/CF817F 闲扯 在Yali经历几天折磨后信心摧残,T1数据结构裸题考场上连暴力都TM没打满 分析 观 ...
- [NOIP10.4模拟赛]2.y题解--折半搜索+状压计数
题目链接: 咕 闲扯: 这题暴力分似乎挺多,但是一些奇奇怪怪的细节没注意RE了,还是太菜了 分析: 首先我们考虑最naiive的状压DP ,\(f[u][v][state]\)表示u开头,v结尾是否存 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- 模拟赛 提米树 题解 (DP+思维)
题意: 有一棵棵提米树,满足这样的性质: 每个点上长了一定数量的Temmie 薄片,薄片数量记为这个点的权值,这些点被标记为 1 到 n 的整数,其 中 1 号点是树的根,没有孩子的点是树上的叶子. ...
- DYOJ 【20220317模拟赛】瞬间移动 题解
瞬间移动 题意 三维空间中从 \((0,0,0)\) 开始,每次移动 1,问刚好走 \(N\) 次能到 \((X,Y,Z)\) 的方案数 \(N\le10^7\),答案模 \(998244353\) ...
随机推荐
- 高性能高可用的微服务框架TarsGo的腾讯实践
conference/2.3 高性能高可用的微服务框架TarsGo的腾讯实践 - 陈明杰.pdf at master · gopherchina/conferencehttps://github.co ...
- <JavaScript> 寄生继承详解
// 将原型继承和非原型继承组合为一体的继承方式叫做组合继承,但是这种方法的继承是有一点小缺陷的,下级函数继承了无用的属性,所以我们有了寄生继承来解决污染问题; //创建上级构造函数-食物 funct ...
- C# DumpBin使用 查看反射C++ dll 动态链接库中的函数
DumpBin是Microsoft提供的一个用于查看.exe..dll文件信息的工具,其位于: C:\Program Files (x86)\Microsoft Visual Studio 10.0\ ...
- Java csv
CsvWriter csvWriter = new CsvWriter("data2019052803.csv", ',', Charset.forName("UTF-8 ...
- SparkMLLib的简单学习
一. 简介 1. 机器学习中,可以将数据划分为连续数据和离散数据 a. 连续数据:可以取任何值,如房价 b. 离散数据:仅有少量特殊值,如一个房屋有2个或3个房间,但不能为2.75个房间 二. 创建向 ...
- (3)Linux命令分类汇总(7~12)
Linux命令分类汇总(7~12) (七)用户管理命令(12个) 1 useradd cdgs 添加用户. 2 usermod 修改系统已经存在的用户属性. 3 userdel ...
- C/C++编程
基本的数据类型: 整型 浮点型(单精度.双精度) 在c语言中,所有的变量声明必须在任何执行语句之前(对当前域来说), 否则编译的时候会出现变量是未声明的标识符的错误. main 入口参数:argc 和 ...
- logstash数据迁移
logstash是一个非常强大的数据迁移工具.这里主要记录今天使用到的几个简单用法. 其中比较需要注意的是 迁移到elasticsearch的时候,output 的 elasticsearch 中的 ...
- jquery防止快速点击
jquery防止快速点击(推荐第三种方式) //全站ajax加载提示 (function ($) { var str = '<div class="ajax-status" ...
- idea开发shell脚本并运行
参考:https://blog.csdn.net/u012443641/article/details/81295999 IEDA中的bashsupport插件支持在IDEA中编写shell脚本文件, ...