随笔分类 -  luogu

摘要:如果纯暴力做的话,最多的格子数有$1000*1000=1e6$,每一个格子都有染色和不染色两种,一共要枚举$2^{1e6}$种情况,肯定会T,, 本题的特殊性在于如果对一个格子进行染色操作A,如果染色过后与想要的最终结果不冲突,那么这个操作A一定是对的,就是不存在反悔的问题(就是后面某一个染色操作出 阅读全文
posted @ 2021-07-19 13:05 yys_c 阅读(47) 评论(0) 推荐(0)
摘要:**思路:**由于递归每一层都计数[l, r]中1和0的个数复杂度太高,极限情况下,递归过程中计数的复杂度:\(1024^{11} = 2^{110}\),这里用前缀和记录一下1的个数,就可以每一层$O(1)$复杂度获得1的个数了,做法就是根据题目说的递归构造树,然后后续遍历 **空间大小问题:** 阅读全文
posted @ 2021-07-18 20:19 yys_c 阅读(214) 评论(0) 推荐(0)
摘要:第一次交的时候T了三个点,发现询问数量最大1e5, 当迷宫比较完美(从每一点开始都可以把整个迷宫跑一遍)的时候,这个复杂度为$1e5 * 1000*1000 = 10^{11}(O(n^2m))$,超时 如果一个位置A可以到达B,则A、B相互可达,并且从A和B出发能到达的位置数目相同,所以再搜索完一 阅读全文
posted @ 2021-07-18 20:18 yys_c 阅读(41) 评论(0) 推荐(0)
摘要:**思路:**一开始想的是改一下深搜的方式,让它只遍历矩形块,然后在下面的遍历中判断是否出现矩形块交叉,但是很难实现,然后发现可以通过在遍历过程中判断是否合法。 船体有交叉(连通块不是矩形)<=> 必定会在深搜过程中搜到如下的(a, b)位置(4种情况之一) 所以在搜到这种情况时,直接返回false 阅读全文
posted @ 2021-07-18 20:17 yys_c 阅读(187) 评论(0) 推荐(0)
摘要:**题意:**给你一个有向无环图,并且给定每一个结点的初始状态和阈值(非输入层的结点的初始状态必为0),求输出层的所有结点的状态,只输出状态值大于0的 **思路:**拓扑排序一遍得到拓扑序,然后根据拓扑序用前面的结点算它的所有后继结点的状态值,最后遍历所有结点,输出位于输出层(出度=0)并且状态值> 阅读全文
posted @ 2021-07-03 10:43 yys_c 阅读(248) 评论(0) 推荐(0)
摘要:思路:每加一条边,更新结点数并做一次拓扑排序判断有没有环,并同时判断能不能唯一确定一个大小关系序列。 #include<iostream> #include<vector> #include<cstring> #include<queue> #include<cstdio> using namesp 阅读全文
posted @ 2021-02-04 13:28 yys_c 阅读(113) 评论(0) 推荐(0)
摘要:做dp做自闭了 写一题毒瘤题放松一下 题意: 对于以下生成字符串规则 \[ \begin{array} \ f(0)\ =\ What\ are\ you\ doing\ at\ the\ end\ of\ the\ world?\ Are\ you\ busy?\ Will\ you\ save\ 阅读全文
posted @ 2021-01-28 18:00 yys_c 阅读(325) 评论(0) 推荐(0)
摘要:这题的dp怎么分析 学习dp的刷表法(这题的正推怎么做) #include<iostream> using namespace std; const int N = 10010; struct Node{ int a, b; }works[N]; int f[N]; int cnt[N]; int 阅读全文
posted @ 2021-01-28 14:16 yys_c 阅读(56) 评论(0) 推荐(0)
摘要:01背包问题变形 #include<iostream> using namespace std; #define LL long long const int N = 1010; int win[N], lose[N], use[N]; int f[N][N]; int n, x; int main 阅读全文
posted @ 2021-01-28 09:40 yys_c 阅读(86) 评论(0) 推荐(0)
摘要:tarjan模板题,从第一个结点开始挨个求极大连通分量,完了之后,按顺序找第一个出现的结点数最多的极大连通分量就是答案,排序输出即可。 #include<iostream> #include<vector> #include<stack> #include<cstring> #include<alg 阅读全文
posted @ 2021-01-26 20:42 yys_c 阅读(61) 评论(0) 推荐(0)
摘要:贪心+dp 题意:有n个车站,m个车,每一个车有一个行程路线(哪个站停,那个站不停),但是所有车的停靠必须遵守规则:每一个车站都有一个等级,在一辆车从起始站 → 终点站(停靠站包括这两个)的过程中,如果最早在x站(它的等级为P)停靠了,那么后面所有的等级 >= P的车站k都要停(注意这里,如果车从k 阅读全文
posted @ 2021-01-26 17:18 yys_c 阅读(561) 评论(0) 推荐(0)
摘要:**题意:**给你一个nxm的迷宫g(x,y范围是0n - 1和0m - 1),‘#’不能走,‘.’可以走,'S'作为起点,现在将迷宫扩展成无穷大,扩展方法是:任意一个(x, y)位置的字符c = g(x % n, y % m),现在问你可不可以从起点处走到无穷远处。 例子: 原始迷宫5x5为中间的 阅读全文
posted @ 2021-01-24 15:09 yys_c 阅读(141) 评论(0) 推荐(0)
摘要:**方法1:**开始想的是先把所有字符串按照字典序升序排一下,然后从前向后以每一个单词为起点爆搜一下,第一个得到的答案就是字典序最小的答案,这个做法是对的,但是どうしても会被卡掉,因为复杂度比较高(由于剪枝不是很方便,所以直接废掉)。 #include<iostream> #include<stri 阅读全文
posted @ 2021-01-23 15:47 yys_c 阅读(248) 评论(0) 推荐(0)
摘要:**思路:**反向建边,以每一个农场为起点dfs一遍,得到从这个农场开始能够访问到的奶牛数目cnt,若cnt = k说明所有的奶牛都能到这个农场,结果+1. 复杂度:\(O(n(n+n+m))=O(nm)\),1e7不会超时 #include<iostream> #include<cstring> 阅读全文
posted @ 2021-01-22 19:22 yys_c 阅读(170) 评论(0) 推荐(0)
摘要:状态表示:$f(i)$表示从$i$开始的所有食物链的集合,存储个数属性 状态计算:\(f(i) = f(j_1)+f(j_2)+...+f(j_k)+...\),其中$j_k$为$i$的第$k$个后继结点 思路:从每一个最大的捕食者出发跑一遍记忆化,把从他开始的所有食物链的个数加上。 #includ 阅读全文
posted @ 2021-01-21 16:32 yys_c 阅读(119) 评论(0) 推荐(0)
摘要:既然是工作之间的相互关系,那么一定是有向无环图,所以可以用记忆化来做 状态定义:$f[i]$表示从$i$号工作开始完成后续所有工作的安排方法集合,存储能够完成$i$号及其后续所有工作所需的最短时间 状态转移:$f[i] = w[i] + max{f[j_1], f[j_2],...f[j_k],.. 阅读全文
posted @ 2021-01-21 12:13 yys_c 阅读(100) 评论(0) 推荐(0)
摘要:原题 最开始简单的认为这题是一个dp问题,的确,如果题目附加条件为DAG,那么用记忆化搜索没有任何问题,但是本题没有这个条件,就是说测试点存在有环图的情况,那自然不能用记忆化。 记忆化连WA三发,我还在纳闷为什么会不对,我忘了使用dp的最基本的条件是无后效性,有环图明显不满足无后效性,他是有后效性的 阅读全文
posted @ 2021-01-09 17:21 yys_c 阅读(100) 评论(0) 推荐(0)
摘要:坑点: x和y是朋友,y的敌人不一定是x的敌人,所以不可以把x的敌人和y的敌人合并。 x和y是敌人,除了y的敌人是x的朋友以外,y的朋友还是x的敌人。 另外注意在合并集合的时候,需要将集合合并到朋友域(1~n)里面来,方便统计。 #include<iostream> using namespace 阅读全文
posted @ 2020-10-29 19:45 yys_c 阅读(84) 评论(0) 推荐(0)
摘要:历程: 直接上记忆化 $89pts$ (对于不可到达n的结点不应该考虑在下一个状态内) 并查集判断可达性WA(我是哪根筋抽了用并查集判断有向图的可达性?) 两次记忆化,一次用来判断可达性,一次求最长路AC #include<iostream> #include<cstring> using name 阅读全文
posted @ 2020-10-26 21:47 yys_c 阅读(91) 评论(0) 推荐(0)
摘要:set的使用注意: 错误1. a = s.begin(); -- a; s.erase(a); // 错误,未知行为,不知道会发生什么 错误2. a = s.end(); s.erase(a); // 错误 ++ a; // 错误,未定义操作 综上:set的begin前面的迭代器和end及end以后 阅读全文
posted @ 2020-10-26 17:28 yys_c 阅读(171) 评论(0) 推荐(0)