摘要: 传送门 60%~70% 裸的并查集,对于每个x=y操作,直接合并x与y所在集合;对于每个x!=y操作,判断x与y的关系,若出现矛盾,输出NO,若所有约束条件都能满足,输出YES。 100% 将所有x和y离散化,然后按上一问做即可。 Tips: 1.需要离散化的数最多有2*n个,数组别开小!! 2.可 阅读全文
posted @ 2018-05-29 21:58 dprswdr 阅读(163) 评论(0) 推荐(0)
摘要: 传送门 k=0时,直接模拟... k=1时,找指向下车乘客最多的站的边,使用加速器。 k>1时,我们枚举每个加速器,类似上一问的做法,暴力找一遍影响最大的边,然后更新答案。 令g[i]表示边i所能影响到的最远的站。 当 到达站i+1的时间>=站i+1晚到达的人的到达时间时,即到达站i+1时可以直接前 阅读全文
posted @ 2018-05-29 21:10 dprswdr 阅读(125) 评论(0) 推荐(0)
摘要: 传送门 思路:用Tarjan算出每个scc,并记录每个scc的大小,找到最大的scc->x,最后从小到大枚举每个点,看是否在scc->x中,这样输出的方案一定是字典序最小的解。 AC Code: 阅读全文
posted @ 2018-05-26 06:32 dprswdr 阅读(165) 评论(0) 推荐(0)
摘要: 传送门 思路:当我们走到一个环时,可以重复绕圈将这个环上的所有蘑菇采完。这启发我们用Tarjan缩点,将整个环的边权缩到一个点上,然后SPFA跑最长路即可。 AC Code: 阅读全文
posted @ 2018-05-26 06:23 dprswdr 阅读(153) 评论(0) 推荐(0)
摘要: -> 题意:有n个点,m条无向边,问从1到n(或从n到1)的一个最长时间t,且满足删除任意一条边后,得到的最短路都小于等于这个时间t。 思路:可以发现只有删除最短路上的边时才会对答案有影响。因此我们枚举最短路上的每一条边,将它们删去后跑最短路,最后取max即为答案。注意删边后图要保证连通。 代码: 阅读全文
posted @ 2018-05-08 19:48 dprswdr 阅读(220) 评论(0) 推荐(0)
摘要: *张浩威老师授课* 树形DP:即在树上DP,用dp[i][]...表示以i为根的子树....。常从根DFS,递归转移dp数组。 没有上司的舞会-- 给定一棵有点权的二叉树,选择若干点,使得选出的点任意两个点都不相连,且选出的点权和最大。 n<=100000。 状态:dp[i][0/1]表示以i为根的 阅读全文
posted @ 2018-05-04 22:27 dprswdr 阅读(311) 评论(0) 推荐(0)
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2018-05-03 22:26 dprswdr 阅读(6) 评论(0) 推荐(0)
摘要: 对于一些刚学DP的同学,直接写出DP转移方程是有些困难的。这里张浩威(张过亿)dalao教给了我们一种简便的方法。可以先写出简单的暴力搜索,然后转成记忆化搜索。 优点:思路简单。 缺点:代码略难写,且很难优化。 例:01背包问题 首先可以写出最暴力的做法,即枚举每个物品选还是不选。 可以观察到当x和 阅读全文
posted @ 2018-05-02 21:55 dprswdr 阅读(273) 评论(0) 推荐(0)
摘要: P.S.:本文题目来自北京大学张浩威(张过亿)dalao的课件。 I.0/1背包 有n个物品,体积为m的背包,每个物品有一个价值vi,和体积ti,选择若干物品,使得体积之和不超过m的情况下价值之和最大。n<=1000,m<=10000。 普通0/1背包。 II.0/1背包+ n<=1000,vi<= 阅读全文
posted @ 2018-05-02 00:43 dprswdr 阅读(213) 评论(0) 推荐(0)
摘要: *钟皓曦老师授课* 常见最短路算法: Floyd → O(n^3) //floyd int dist[maxn][maxn]; memset(dist,0x3f,sizeof(dist)); for (int a=1;a<=m;a++) { int s,e,d; cin >> s >> e >> d 阅读全文
posted @ 2018-04-29 23:55 dprswdr 阅读(178) 评论(0) 推荐(0)