07 2019 档案

摘要:今天又考试了...... 这是T2。 Analysis 考试时想了一个判断质因数个数+打表的神奇方法,但没在每次输入n,m时把ans置0,50分滚粗。 看了题解才发现原来是杨辉三角+二维前缀和,果然还是我太菜了。 注意在求前缀和的时候如果这个数是0且在杨辉三角中,说明它被k求余成了0,就要把它+1。 阅读全文
posted @ 2019-07-31 13:48 handsome_zyc 阅读(210) 评论(0) 推荐(0) 编辑
摘要:Analysis 这道题因为我们要给能到达的两个点都连上,又由于n<=200,所以我们可以用n³的传递闭包来建边,再用匈牙利算法来求二分图最大点独立集。 阅读全文
posted @ 2019-07-30 15:47 handsome_zyc 阅读(279) 评论(0) 推荐(0) 编辑
摘要:Analysis 就是一个裸的广搜,每次从是1的点开始找就好啦~~~ 阅读全文
posted @ 2019-07-30 14:22 handsome_zyc 阅读(285) 评论(0) 推荐(0) 编辑
摘要:Analysis 这道题是搜索,类似于小木棍,加一些剪枝。 第一个剪枝是如果当前的答案已经大于了我们已知的最小答案,不用说直接return返回即可。 第二个剪枝是我们可以将小猫的体重从大到小排序,这样我们的搜索树就会缩短许多。 阅读全文
posted @ 2019-07-30 13:23 handsome_zyc 阅读(333) 评论(0) 推荐(0) 编辑
摘要:Analysis 这道题我一开始想到的是传递闭包,但是时间复杂度是n³,也开不下30000*30000的数组,所以我想到了拓扑+状态压缩(bitset),从后往前找,把能到达的点能到哪里用位运算赋到上一个中,最后调用.count()输出就好了。 阅读全文
posted @ 2019-07-30 10:07 handsome_zyc 阅读(187) 评论(0) 推荐(0) 编辑
摘要:Analysis 这道题也是考试题,我也依然打了个n三次方暴力。正解是先枚举差,再枚举c和d,a和b用乘法原理优化,这样就能大大减少时间。 阅读全文
posted @ 2019-07-29 16:00 handsome_zyc 阅读(280) 评论(0) 推荐(0) 编辑
摘要:Analysis 这道题是我们今天考试的一道题,考试时只想到了暴力70分的做法,实际上正解是用队列来维护国籍的种类就行了。 阅读全文
posted @ 2019-07-29 14:04 handsome_zyc 阅读(452) 评论(0) 推荐(0) 编辑
摘要:Analysis 建图+强连通分量+SPFA求最长路 但要保证最后到达的点中包含酒馆 虽然思路并不难想,但要求的代码能力很高。 阅读全文
posted @ 2019-07-26 15:02 handsome_zyc 阅读(182) 评论(0) 推荐(0) 编辑
摘要:Analysis 这道题跟前几道题差不多,依旧是匈牙利算法求二分图匹配,在连边的时候,要连两个矛盾的位置(即一个骑士和其控制的位置)。然后就跑一遍匈牙利算法就好了。 阅读全文
posted @ 2019-07-26 10:09 handsome_zyc 阅读(293) 评论(0) 推荐(0) 编辑
摘要:Analysis 这是一个经典的二分图问题,我们将图进行奇偶染色,注意边界条件的判断。再跑一遍匈牙利算法就行了,跟上一题很像。 阅读全文
posted @ 2019-07-25 13:08 handsome_zyc 阅读(281) 评论(0) 推荐(0) 编辑
摘要:Analysis 这道题是二分图匹配,设可以放車的的地方的坐标为(i,j),则连一条i到j的有向边(注意是有向边),然后再跑匈牙利算法就好了。时间复杂度是O(nm(n+m)),在1≤n,m≤200的情况下可以接受。 阅读全文
posted @ 2019-07-25 10:49 handsome_zyc 阅读(202) 评论(0) 推荐(0) 编辑
摘要:read 函数 inline int read() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9') {if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9') {x=x*10+c-'0'; c= 阅读全文
posted @ 2019-07-24 14:32 handsome_zyc 阅读(654) 评论(0) 推荐(0) 编辑
摘要:Tarjan 模板题 第一问就是缩点之后看有多少个入度为零的点就好了。 第二问是在缩点后将每个点的入度和出度都求出(只要有入度或出度就置为1),然后比较哪个有值的多,将多的作为答案输出。原因是由题可得,要使缩完的点也构成一个强连通分 量,即入度和出度都大于等于1。 阅读全文
posted @ 2019-07-24 14:27 handsome_zyc 阅读(184) 评论(0) 推荐(0) 编辑
摘要:一道经典的割点例题,用size数组记录该子树有多少个节点,sum是这棵搜索树上有多少个节点,sum*(n-sum-1)是将点删掉后的数对数量。 阅读全文
posted @ 2019-07-24 14:22 handsome_zyc 阅读(177) 评论(0) 推荐(0) 编辑
摘要:今天学了割点,就A了这道板子,比较难理解的地方就在于如果是根节点就要找两个点来满足low[y]>=dfn[x],如果不是就只需找一个点来满足。Tarjan(i,i)中第一个i是开始搜索的点而第 二个i代表根节点,就是这棵搜索树的根,虽然一开始值是一样的,但x是要随着搜索向下找的,而根节点在搜索过程中 阅读全文
posted @ 2019-07-24 14:21 handsome_zyc 阅读(278) 评论(0) 推荐(0) 编辑
摘要:今天学了强连通分量的Tarjan算法,做了这道类似于板子题的题(尽管我调了1.5h)。主要的思路是用Tarjan缩点之后,求每个点的入度(实际上是出度,因为我是反着连边的)。如果 有且只有一个点的入度大于零,那个强连通分量里有的点的个数就是答案。具体实现见代码: 阅读全文
posted @ 2019-07-24 14:18 handsome_zyc 阅读(213) 评论(0) 推荐(0) 编辑
摘要:今天学了网络最大流,EK 和 Dinic 主要就是运用搜索求增广路,Dinic 相当于 EK 的优化,先用bfs求每个点的层数,再用dfs寻找并更新那条路径上的值。 EK 算法 Dinic 算法 阅读全文
posted @ 2019-07-24 14:14 handsome_zyc 阅读(337) 评论(1) 推荐(1) 编辑
摘要:差分约束系统,维护前缀和,根据式子d[ b ] < = d[ e + 1 ] - t,可以看出要连e和b - 1,但占用了超级源点0,所以要把区间向后移,这样就可以用超级源点0来保持图的连通性(也可 以用n + 1作为超级源点,就不用了后移了) 阅读全文
posted @ 2019-07-24 14:11 handsome_zyc 阅读(380) 评论(0) 推荐(0) 编辑
摘要:今天学了差分约束系统, 这是一道板子题。 核心:a[v]>a[u]+d 相当于从u到v连一条长度为d的有向边。由于要判断有环,所以要从0点先跑一遍spfa因为1点不一定能到所有的点。 阅读全文
posted @ 2019-07-24 14:07 handsome_zyc 阅读(240) 评论(0) 推荐(0) 编辑
摘要:挺好的一道题,本身不难,就把求两个点的LCA变为求三个点两两求LCA,不重合的点才是最优解。值得一提的是,最后对答案的处理运用差分的思想:假设两点 一点深度为d1,另一点 深度为d2,它们LCA深度为d3,这二者之间的距离即为d1+d1-2*d3,只要将这两点推广成三点即可。 阅读全文
posted @ 2019-07-24 14:04 handsome_zyc 阅读(184) 评论(0) 推荐(0) 编辑
摘要:这道题相当于倍增求LCA的板子,我们只要构建一棵树,然后距离就是x的深度+y的深度 - LCA(x,y)的深度; 阅读全文
posted @ 2019-07-24 13:58 handsome_zyc 阅读(111) 评论(0) 推荐(0) 编辑
摘要:这道题是我们考试的第一题,非常水,就是一个树的直径的板子。详见上一篇博客。 阅读全文
posted @ 2019-07-24 13:56 handsome_zyc 阅读(400) 评论(2) 推荐(0) 编辑
摘要:① 两次dfs 方法:先从任意一点P出发,找离它最远的点Q,再从点Q出发,找离它最远的点W,W到Q的距离就是是的直径 证明如下: ①若P已经在直径上,根据树的直径的定义可知Q也在直径上且为直径的一个端点 ②若P不在直径上,我们用反证法,假设此时WQ不是直径,AB是直径 >若AB与PQ有交点C,由于P 阅读全文
posted @ 2019-07-24 13:53 handsome_zyc 阅读(11935) 评论(2) 推荐(2) 编辑
摘要:思路: 首先先将每个输入的数据与n的最大公约数求出(因为如果a[i]是密码,那么所有a[i]与n最大公约数的倍数也是密码;于是如果a[i]不是密码,那么所有a[i]与n最大公约数的倍数也都不是密码)再从1到sqrt(a[k])(其实1到a[k]也行)找,最小且符合条件就是最小密码。 阅读全文
posted @ 2019-07-24 13:42 handsome_zyc 阅读(293) 评论(0) 推荐(0) 编辑
摘要:一道经典的BFS 用四个for搜索四位就行了,只要能推出怎么只变4位中的一位就很水了 阅读全文
posted @ 2019-07-24 13:34 handsome_zyc 阅读(251) 评论(0) 推荐(0) 编辑
摘要:深搜,只不过是三维的。 阅读全文
posted @ 2019-07-24 13:30 handsome_zyc 阅读(241) 评论(0) 推荐(0) 编辑
摘要:深搜,向四个方向,在不越界的情况下一直闷头走,直到撞墙。到达终点就输出,没到就回溯。 阅读全文
posted @ 2019-07-24 13:28 handsome_zyc 阅读(177) 评论(0) 推荐(0) 编辑
摘要:思路 dfs(只不过要用邻接表存)邻接表是由表头结点和表结点两部分组成,其中表头结点存储图的各顶点,表结点用单向链表存储表头结点所对应顶点的相邻顶点(也就是表示了图的边)。在有向图里表示表头结点指向其它结点(a->b),无向图则表示与表头结点相邻的所有结点(a—b) 阅读全文
posted @ 2019-07-24 13:24 handsome_zyc 阅读(250) 评论(0) 推荐(0) 编辑
摘要:我个人感觉就是一道bfs的变形,还是对bfs掌握不好的人有一定难度。 本题思路: 大体上用bfs搜,用map来去重,在这里只需要一个队列,因为需要较少步数达到的状态一定在步数较多的状态之前入队列。 阅读全文
posted @ 2019-07-24 13:18 handsome_zyc 阅读(286) 评论(0) 推荐(0) 编辑
摘要:这道题其实是一道01背包的变形题,主要思路如下:在不把剩余时间用光的前提下(剩余时间>0),尽可能的多唱歌。于是我们可以用dp[i]表示的是到当前i秒时,最多可以唱多少歌。 状态转换方程:dp[k]=max(dp[k],dp[k-yy]+1);最后输出可以唱多少歌。 阅读全文
posted @ 2019-07-24 13:11 handsome_zyc 阅读(215) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示