随笔分类 - atcoder
摘要:考虑purfer序列,若生成树的pufer序列为$p_{i}$,则答案为$(\prod_{i=1}^{n}a_{i})\sum_{p}\prod_{i=1}^{n}\frac{(a_{i}-1)!}{(a_{i}-1-s_{i})!}$(其中$s_{i}$为$p$中点$i$出现的次数,即度数减1)
阅读全文
摘要:暴力二分答案+网络流,点数为$o(nk)$,无法通过 考虑Hall定理,即有完美匹配当且仅当$\forall S\subseteq V_{left}$,令$S'=\{x|\exists y\in V_{left}且(x,y)\in E\}$,满足$|S|\le |S'|$ 代入本题中,即$o(2^{
阅读全文
摘要:先将这个序列翻转,贪心找到最长的'101010……'的形式的子序列并删除,重复此过程并记这些字符串长度依次为$l_{1},l_{2},...,l_{n}$,若最终还有字符剩余则一定无解 假设$S$中元素从大到小依次为$x_{1},x_{2},...,x_{m}$,则合法当且仅当: 1.$L=\sum
阅读全文
摘要:考虑对于$\{a_{i+1},...,a_{n}\}$,在其前面插入$a_{i}$对$x_{i}$的影响(不考虑$a_{1}$到$a_{i-1}$): 1.$x_{i}=0$,因为其前面没有数字了 2.若$a_{j}+Tx_{j}>a_{i}-T$,则令$x_{j}$加1(字典序最大) 3.若$a_
阅读全文
摘要:有一个(比较显然又有点假的)结论:最优方案中(若存在),每一个数(指$3n$个)最多被移动1次 先$o(n^{2})$枚举移动到队首和队尾的操作次数(即目标状态的一个前缀和后缀),判定能否合法 首先,根据这个前缀和后缀的数字以及个数,可以确定每类数(指$n$类)的操作(但不能确定顺序),即可以知道操
阅读全文
摘要:二分枚举答案,判定答案是否合法 贪心:每一个叶子只能经过一遍,因此叶子的顺序一定是一个dfs序,即走完一棵子树中的所有叶子才会到子树外 根据这个贪心可以dp,设$f[k][l][r]$表示仅考虑$k$的子树,$l$和$r$为第一个和最后一个叶子到根的距离,时间复杂度大约有$o(n^{4或5})$,无
阅读全文
摘要:记$G[S]$表示图$G$在点集$S$上的导出子图,即$G[S]=(S,{(x,y)|x,y\in S且(x,y)\in E})$ 定义$g(S)$为所有$E'$(满足$E'\subseteq G[S].E$)的图$G'=(S,E')$的染色方式之和,考虑枚举其中一种颜色的点集,则有$g(S)=\s
阅读全文
摘要:先对$n$分奇偶两种情况考虑—— $n$为奇数,显然先手希望最终产生的$x_{1}\oplus x_{2}\oplus...\oplus x_{n}=0$ 对于后手,考虑构造:将最大的未被选择的$a_{k}$放在最大的$x_{t}$上,很明显除去先手的第一个以外,后手的每一次都比先手的下一次放的数大
阅读全文
摘要:贪心,求出前$i$个字符串所能组成的字典序最小的字符串$ans$(特别的,这里的字典序有$ab>abc$),同时保证剩下的长度能通过$l_{i+1},...,l_{n}$拼接 考虑插入一个字符串$s_{i+1}$,在$ans$的任意拼接处(包括开头)可以替换上这个串,之后使得$ans$的字典序最小且
阅读全文
摘要:结论:排列$p'_{i}$可以通过排列$p_{i}$得到当且仅当$\forall 1\le i<j<i+k,(p_{i}-p_{j})(p'_{i}-p'_{j})>0$ 证明:构造$b_{p_{i}}=i$,交换即令$b_{i}$与$b_{i+1}$交换,条件为$|b_{i}-b_{i+1}|\g
阅读全文
摘要:令$(S_{a},S_{b})$表示$a_{i}\in S_{a}$且$b_{i}\in S_{b}$的i个数,那么答案相当于$S(0,1)+S(1,0)=S(0,1)+S(\{0,1\},0)-S(0,0)$,容易发现$S(\{0,1\},0)=\sum_{i=1}^{n}[b_{i}==0]$,
阅读全文
摘要:对网格图黑白染色,在黑色格中填不同的质数,白色格中填相邻黑色格的lcm+1,但这样会超过1e15的上限将网格图划分为两类对角线,每一条对角线选一个质数,然后每一个点就是两条对角线的质数相乘,而白格的值就仅为四个较小质数的乘积+1(注意不能让两个大质数配到一起) 1 #include<bits/std
阅读全文
摘要:二分答案,考虑答案是否会大于等于这个mid,显然所有数值分为两类:大于等于mid和小于mid将n个数转化为01串,如果0和1不相邻,那么答案就是第一个数/最后一个数(一定会相同),考虑有连续两个0/1否则连续的两个数一定会上升到某一个高度并变为一个数,因此只需要找到最高的一层全部变成0/1时,也就是
阅读全文
摘要:不断删除重边,然后将两个点的边集启发式合并(要考虑到两棵树),合并时发现重边就加入队列,最后判断是否全部删完即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 100005 4 set<int>s[N]; 5 map<int
阅读全文
浙公网安备 33010602011771号