[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\) ...
随机推荐
- pre-fork 分叉 软分叉 硬分叉 前叉实现 pre-fork implementation
https://mp.weixin.qq.com/s/wIDTs2J1ZkLkAEHqQnkYnw 什么是分叉?为何对区块链发展至关重要? Uselink公有链 Uselink公有链 2018-12- ...
- protected-broadcast 规范使用系统应用组件自定义广播
1. protected-broadcast 规范使用系统应用组件自定义广播 参考:https://blog.csdn.net/TaylorPotter/article/details/7019424 ...
- fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题
fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题. 先记下这个坑,改天在看看是怎么导致的,暂时通过避免使用Integer作为键(使用St ...
- java定时任务Timer/scheduleAtFixedRate
Timer类是用来执行任务的类,定时器 scheduleAtFixedRate模式可以用,在这个模式下,Timer会尽量的让任务在一个固定的频率下运行. 参考:http://swiftlet.net/ ...
- MSMQ菜鸟教程
一 .MSMQ概述 MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于 ...
- IDEA在引入Maven项目后Dependencies中在出现红色波浪线
解决方法: 移除pom.xml中相关依赖,再重新添加即可. 情况及具体解决方法如下: 1.在Maven Project中 Dependencies 出现红色波浪线,如图所示 2.查询本地仓库:jar包 ...
- Django:(07)数据库
一.ORM框架 ORM ,Object relational mapping 对象关系映射. 把类和数据库表对应,把对象和表记录对应,通过类和对象操作数据库表中的数据,而不需要编写SQL语句. Dja ...
- K/3 Cloud 单据关联查询
销售出库单 下推 销售退货单,如何获知他们的关联关系?T_SAL_OUTSTOCKENTRY 是销售出库单分录T_SAL_RETURNSTOCKENTRY 是销售退货单分录T_SAL_RETURNST ...
- Bootstrap 控制台示例
1.打开https://getbootstrap.com/docs/4.3/examples/ 2.选择Dashboard 3.右键查看源代码,另存为 4.通过源代码界面下载JS和CSS 5.修改绝对 ...
- 日历插件 js
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...