1 2 3 4

随笔分类 -  图论

摘要:https://ac.nowcoder.com/acm/contest/9977/C 这题让找基环树删除环上一边之后最大的直径 我枚举删除环上的边写的,很暴力,希望路过的大佬告诉我更加高效的写法 #include<iostream> #include<string> #include<queue> 阅读全文
posted @ 2020-12-15 21:55 Lesning 阅读(78) 评论(0) 推荐(0) 编辑
摘要:https://www.luogu.com.cn/problem/P4374 洛谷这题一言难尽 添加新边影响的边只有与新边成环的所有边,那就很简单了,树链剖分树上最大值就行了。。。很简单不知道为啥是紫题 #include<iostream> #include<vector> #include<que 阅读全文
posted @ 2020-12-12 10:36 Lesning 阅读(77) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=3694 q次询问,问你添加一条边后,图里还剩几个桥。 由于我热爱神仙数据结构,于是我用树链剖分过了这道题 做法: 1.并查集随便建树 2.不参与树的边加入q次询问,但不输出 3.树剖用0覆盖1,比如查询x y的路径,就把x y的路径点都覆盖成0, 阅读全文
posted @ 2020-12-11 11:20 Lesning 阅读(71) 评论(0) 推荐(0) 编辑
摘要:https://ac.nowcoder.com/acm/problem/20472 问你能不能通过交换行列的方式使得对角线上全是1 可以这样考虑: 建立二分图,左顶点横坐标,右顶点纵坐标,边就是数字1。 1.当行交换时,相当于左顶点的交换 2.当列交换时,相当于右顶点的交换 所以最好情况就是最大匹配 阅读全文
posted @ 2020-12-11 11:13 Lesning 阅读(80) 评论(0) 推荐(0) 编辑
摘要:https://ac.nowcoder.com/acm/contest/5389/D 我也不敢说我学会了,说说总结的经验吧。 当假设dp[a][b],dp内部状态是小于等于b的时候,不必枚举b,只要让b尽可能大然后取dp[a][b] = min(dp[a][b-1],dp[a][b])就行了 应该就 阅读全文
posted @ 2020-12-05 17:16 Lesning 阅读(77) 评论(0) 推荐(0) 编辑
摘要:题目链接 本来有负边的最短路应该是O(n^3) 这个算法把负权图改成了正权图,可以跑dij,能够用来优化多次涉及spfa的算法,比如费用流 十分神奇 核心想法: 1.建立0 >(1--n),然后跑个spfa,得到d[i--n], 2.把x >y len改成 x >y len - d[y] + d[x 阅读全文
posted @ 2020-12-04 15:51 Lesning 阅读(72) 评论(0) 推荐(0) 编辑
摘要:基环树的最大独立集 正解就是从环上找相邻两点s,t,求出分别以s和t为根,求max(dp[s][0],dp[t][0]) 这就是答案。因为s和t不能同时选,那只要有一个不选就行。 我的解法是单独求基环树上的点。。。。。很捞 我的写法 #include<iostream> #include<strin 阅读全文
posted @ 2020-12-03 21:15 Lesning 阅读(74) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/problemset/problem/461/B 感觉这题有点玄学阿。。。。。怎么说呢。。。 状态1是x在有黑色的区域里面,状态0是只在白色区域里面,其实看一眼代码就懂了,一直想不出来我很难过。。。。 好菜呀,还要继续学树形dp才行阿 #include<i 阅读全文
posted @ 2020-11-29 14:21 Lesning 阅读(77) 评论(0) 推荐(0) 编辑
摘要:https://codeforces.com/problemset/problem/1322/C 快乐 核心在于 gcd(a,b) == gcd(a+b,a,b) 加法不会影响和的gcd,所以本质就不是那么多了 既然是gcd,那就枚举出左边尽可能不重合的右边权值的GCD吧, #include<ios 阅读全文
posted @ 2020-11-27 12:31 Lesning 阅读(63) 评论(0) 推荐(0) 编辑
摘要:https://codeforc.es/contest/1454/problem/E 看样例就能看懂题意,就是找基环树的环,然而我环找错了。。。。。。 我是sb,我要学图!!! #include<iostream> #include<cstring> #include<algorithm> #inc 阅读全文
posted @ 2020-11-25 22:00 Lesning 阅读(62) 评论(0) 推荐(0) 编辑
摘要:给一堆数字,每个数字找和自己异或最小的连接,现在求删除最少几个点能留下一棵树 就是分治搞树,第i位置都是0的之间有边,i位为1的数字之间有变,类似树形dp的分治一下就得出结论了, 第i为是1的要和第i为是0的连接,只能是i位为1的集合都消除了才可能,具体看代码吧,挺简单的。。。。 #include< 阅读全文
posted @ 2020-11-18 21:05 Lesning 阅读(254) 评论(0) 推荐(0) 编辑
摘要:https://codeforces.com/problemset/problem/1436/D 这题就是让村名尽可能集中在叶子上,但是可能叶子上本来就有很多村民,就是这样。 假设 1. mx[x]为在x点可以抓到的最多的人 2. chal[x]为 在x点还差chal[x]人就可以让x下面所有叶子都 阅读全文
posted @ 2020-10-27 19:02 Lesning 阅读(182) 评论(0) 推荐(0) 编辑
摘要:太可惜了,难过 真的难受啊 对于树上三个点a,b,c 汇于一个点的最短路和 ans,有dis(a,b) + dis(b,c) + dis(c,a) = ans * 2 知道这个以后就可以用换根dp解决了,假设dp[x][i]表示所有i颜色的节点到x的距离和 具体可以看代码, 注意答案会爆long l 阅读全文
posted @ 2020-10-26 20:41 Lesning 阅读(649) 评论(0) 推荐(0) 编辑
摘要:https://www.luogu.com.cn/problem/CF1249F 这题看题解云里雾里的,我自认为我写的比较简单; dp[x][i]表示以x为根,选中节点离x最近距离为i。(最小深度) 那么如何转移呢? 答案无非就是两种方式构成的,原来子树上就有,两棵树合并而成。于是就有了下面的式子 阅读全文
posted @ 2020-10-24 10:08 Lesning 阅读(155) 评论(0) 推荐(0) 编辑
摘要:https://www.luogu.com.cn/problem/P1272 一个神奇的树形dp,大概就是下面这样转移的吧 dp[x][i]表示x为根,保留i个点最少删除几条边 #include<iostream> #include<vector> #include<algorithm> #incl 阅读全文
posted @ 2020-10-23 20:36 Lesning 阅读(102) 评论(0) 推荐(0) 编辑
摘要:就是给你一棵树,从1号根开始放无数个机器人,要机器人覆盖所有边的最小路径和; 可以树形DP但是没必要,假设只有一个机器人的时候,答案就是 边数*2 - 根离最远的叶子的距离,两个机器人的时候就相当于把走过两次的边改成一次,牺牲一些边获取一些边,算贡献的方法; 具体可以看代码 #include<ios 阅读全文
posted @ 2020-10-20 16:45 Lesning 阅读(678) 评论(2) 推荐(1) 编辑
摘要:https://ac.nowcoder.com/acm/contest/7818/B 很玄乎的一个状压dp 总的来说就是n个1的状态转换成n+1个1的状态,写法很奇妙,具体看代码吧。。。 #include<iostream> #include<cstring> #include<vector> #i 阅读全文
posted @ 2020-10-02 18:57 Lesning 阅读(186) 评论(0) 推荐(1) 编辑
摘要:https://ac.nowcoder.com/acm/contest/7817/H 给你a g t c 让你两两交换最少的次数后,两个字符相等 如果 a >g 而且 g .a,就一步, a >g, g >t, t >a(长度为三的环)置换两步。 由于只有四个字符存在,可以枚举长度为2的环,3的环和 阅读全文
posted @ 2020-10-01 17:41 Lesning 阅读(207) 评论(0) 推荐(0) 编辑
摘要:https://www.luogu.com.cn/problem/P4068 质因数分解然后建立二分图,跑费用流 具体看第一个官方题解的代码就好了,我想说的是费用流控制流量使得费用大于0且流量最大的方法,具体看代码,受益匪浅 #include<iostream> #include<vector> # 阅读全文
posted @ 2020-09-22 10:26 Lesning 阅读(145) 评论(0) 推荐(0) 编辑
摘要:https://ac.nowcoder.com/acm/contest/7079/C 由题可知是最小生成树,先把比L【i】小的连通块建立好,合并集合x,y可得 》 par[y] = x,ans += siz[x]*siz[y],siz[x] += siz[y]; #include<iostream> 阅读全文
posted @ 2020-09-03 22:24 Lesning 阅读(237) 评论(0) 推荐(0) 编辑

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