[CF1105E] Helping Hiaset】的更多相关文章

问题描述 你在某社交网站上面注册了一个新账号,这个账号有\(n(n\leq 10^5)\)次记录.要么就是你更改过一次ID,要么就是一个ID为\(s(|s|\leq 40)\)的朋友访问过你的空间. 你有\(m(m\leq 40)\)个朋友.每一个朋友都会访问你的空间至少一次.如果这一个朋友每一次访问你的空间的时候,你的ID和它的ID一样,那么他就会高兴. 求你最多能让多少人高兴. 输入格式 第一行一个两个正整数n,m. 接下来n行每行表示一次记录,有如下两种格式: 1 2 s 其中1表示你更改…
题目地址:CF1105E Helping Hiasat 首先将问题转化成图论:对每个人建立一个点,将同一次修改后的所有人代表的点两两连一条边,那么最终所求的就是这个图的最大独立集 我们知道最大独立集是NPC问题,只能暴力搜 裸暴力的时间复杂度为 \(O(2^m)\) ,由于 \(m\leq 40\) ,无法承受 我们知道最大独立集=补图最小团,考虑记忆化搜索,时间复杂度降为 \(O(\sqrt {2^m})\) 我写的代码广泛应用了STL,包括 \(vector\),\(set\),\(map\…
传送门 发现自己不会求最大团了可海星 如果将每一个朋友看做点,将两个\(1\)之间存在\(2\)操作的所有朋友之间互相连边,那么我们最后要求的就是这个图的最大独立集. 某个图的最大独立集就是反图的最大团 然后暴力dfs求最大团即可 #include<iostream> #include<cstdio> #include<bitset> //This code is written by Itst using namespace std; inline int read(…
题目链接 戳我 \(Solution\) 将好友访问你的主页的状态用二进制存下来 其中若第\(i\)位是\(1\),则表示这个好友在第\(i\)个\(1\)操作后访问了你的主页,否则没访问. 所以如果两位好友都高兴则两位好友的二进制数\(\&\)的值为\(0\) 所以这样就变成了一个最大独立集的问题了 如果\(\&\)不为\(0\)这两个好友不能在一个集合. 看数据范围,我们考虑折半 我们先分成两半,一半的最大独立集合保留.另一半用高维前缀和(实际上时高维\(max\)) 枚举没有处理的独…
CF494C Helping People 题意翻译 有一个长为 \(n\) 的数列,初始时为 \(a_{1\dots n}\). 给你 \(q\) 个操作,第 \(i\) 个操作将 \([l_i,r_i]\) 内的数全部加一,有 \(p_i\) 的概率被执行.保证区间不会交错,即:\(\forall i,j\in[1,q],l_i\le r_i<l_j\le r_j\) 或 \(l_i\le l_j\le r_j\le r_i\) 或 \(l_j\le r_j<l_i\le r_i\) 或…
E - Helping Hiasat 裸的最大团,写了一种 2 ^ (m / 2)  * (m / 2)的复杂度的壮压, 应该还有更好的方法. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define PLI pair<LL, int> #define PII p…
[Codeforces-div.1 494C] Helping People 试题分析 不难注意到题目所给的性质是一棵树,所以肯定是树形dp. 那么期望没有办法合并,我们还有一种最笨的方法就是求出概率然后直接乘上权值累加. 然后也不难得出朴素的dp:\(f_{i,j}\)表示区间\(i\),最大值为\(mx_i+j\)的概率. 也可以很轻松的写出一个\(O(nm^2)\)的dp,还需优化. 发现转移其中一维是一个前缀和乘积的形式,那么我们改变一下状态:\(f_{i,j}\)表示区间\(i\),最…
CF 282 C Helping People 题解 [原题] time limit per test 2 seconds memory limit per test 512 megabytes input standard input output standard output Malek is a rich man. He also is very generous. That's why he decided to split his money between poor people.…
Helping Hiasat 题解: 如果我们把连续的2出现的人都相互连边的话, 题目就是问最大独立集的答案是多少. 求最大独立集可以将图变成反图, 然后求最大团. 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); #…
Codeforces 1105 E 题意:给你m个事件,每个事件可能是以下两种之一: \(1\),代表此时可以更改用户名 \(2\) \(s\),代表\(s\)来查看是否用户名与其名字相符 一共有\(m\leq40\)个人,如果一个人每次看到用户名都与其名字相符,则他会开心,问怎么更改用户名使得开心的人最多? 思路:看每次\(1​\)后面连续的\(2​\),把其中的人两两连边,题目转化成求此图的最大独立集.看到\(m​\)的范围较小,且不能直接做,那么考虑折半搜索.把人分成前一半和后一半,枚举出…