随笔分类 -  图论

摘要:n<=5000个点m<=10000条边的无向图,求最少加几条边使它变成边双联通图,就是任意两点间都有至少2条边不相交的路径。 tarjan缩点,答案是叶子节点数/2向上取整。 不过要注意这里的“叶子节点数”是指度数为1的点,并不是最后那棵树以某个点为根的叶子节点树。如果找叶子点数一定要以某个点为根, 阅读全文
posted @ 2017-08-26 17:04 Blue233333 阅读(245) 评论(0) 推荐(0)
摘要:n<=3000个点m<=20000条无向边的图,有p<=n个出发点,每个出发点都不可拆,现拆一些点使每个出发点都不能到达点1,求最小点数。 简单的最小割。每个点拆成两个x和y,无向边A--B即Ay->Bx,By->Ax,每个点拆成的x和y再连边容量1,然后建超级源向p个点连边,最大流,没了。 错误。 阅读全文
posted @ 2017-08-26 14:07 Blue233333 阅读(260) 评论(0) 推荐(0)
摘要:m<=4000条关系描述n<=1000个事件,每条关系描述了一个或语句表示“x事件发生或不发生”或“y事件发生或不发生”,求每个事件是必发生、必不发生还是都行,无解输出IMPOSSIBLE。 是一个2-SAT问题。建图后把每个事件发生不发生都dfs一遍即可。听说缩点后会更快,就写了个tarjan。 阅读全文
posted @ 2017-08-26 13:15 Blue233333 阅读(305) 评论(0) 推荐(0)
摘要:n个村庄m条带权路,权值为花费,村庄可以造东西卖东西,造完东西可以换地方卖,给出每个村庄造东西花费a和最多个数b、卖东西价值c和最多个数d,求最大收益。 裸的费用流。然而还WA了一发。很好。 建源向每个村庄连边(b,a),(b,a)表示容量b费用a,每个村庄向汇点连边(d,-c),村庄间有路就互相连 阅读全文
posted @ 2017-08-13 19:55 Blue233333 阅读(210) 评论(0) 推荐(0)
摘要:给n<=100000个点的树,每个点有一个01串,长度m<=200,串的可以随时01取反,串的每一位对应权Vi,从根节点到某个节点经过决定哪些串取反后取得的最大价值为某个点的权值,求:在这棵树上乱走,不能走权相同的相邻两点,每个长度D的简单路径的方案数。 题目很奇怪。结论很不显然。TJM和HR大佬很 阅读全文
posted @ 2017-08-13 10:35 Blue233333 阅读(133) 评论(0) 推荐(0)
摘要:n<=500,n*n网格给m<=10000个点,每次发射子弹打掉一行或一列的点,求最少几发子弹。 网络流经典模型,每行每列看成点,一个(x,y)表示,表示第x行的点和表示第y列的点必有一个要选,连边。接下来二分图匹配或最大流即可。 1 #include<cstdio> 2 #include<cstr 阅读全文
posted @ 2017-07-28 16:22 Blue233333 阅读(222) 评论(0) 推荐(0)
摘要:n<=1000头牛各有一个未知值Ai,已知m<=10000条形如Ax>Ay的不等关系,求将整个序列排序的最少比较次数。 Aa>Ab,Ab>Ac > Aa>Ac,传递性,因此按m条不等关系连边建图,求出传递闭包,就是已知的关系。 求出传递闭包中的i≠j的0的个数即可。错误!连的图是有向图,而已知大于关 阅读全文
posted @ 2017-07-28 10:55 Blue233333 阅读(292) 评论(0) 推荐(0)
摘要:n<=100000个点m<=300000条边有权无向联通图,给出K<=10000个特殊点求K个点中任意两点最短路的最小值。 方法一:K小,随便搞。先构造最短路树,在最短路树上Dijkstra,遇到第一个特殊点就返回。代码如下: 如下个头。首先时间复杂度显然超了,其次建树时要考虑重边,比较难搞。 方法 阅读全文
posted @ 2017-07-27 17:26 Blue233333 阅读(174) 评论(0) 推荐(0)
摘要:n<=1000而m<=10000的DAG中求从n到1的前K<=100短路,不存在输出-1。 方法一:之前写过“第二短路”,比较2次;如果是要“前K短路”的话,dis需要是一个支持查找、插入(找到一个新的第u大,u<=K,需要插入u)、删除(插入后把最后一个删除)的东西,那就Treap或者Splay乱 阅读全文
posted @ 2017-07-26 17:15 Blue233333 阅读(294) 评论(0) 推荐(0)
摘要:n<=10000局剪刀石头布,对面第i局出Ai,m<=10000种对你出什么提出的要求:Xi Yi Wi 表示第Xi局和第Yi局,Wi=1:必须不同;Wi=0:必须相同,问是否存在你一局都不能输的可行解。 一开始对面就把你每局的选择减成2个了,又是一个2-SAT问题。至于建图一定要考虑周全!注意一个 阅读全文
posted @ 2017-07-20 16:48 Blue233333 阅读(208) 评论(0) 推荐(0)
摘要:给n<=100对点,从每对点里面挑一个并以这些挑出的点为圆心画圆,并且这些圆不能互相覆盖,找出一种方案使得这些圆半径中最小的那个最大。 “最小值最大”就是二分答案啦!考虑现在每个点都画出半径x的圆,如何选点呢? 可以发现选了一个点P之后与其距离相差2x内的点Q都不能被选,也就是“与P在同一对的另一个 阅读全文
posted @ 2017-07-20 10:42 Blue233333 阅读(206) 评论(0) 推荐(0)
摘要:用的是刘汝佳大白书里面的版本。网上还有tarjan缩点后再拓扑排序构造解的版本,感觉靠谱一点,但太长了。。。 ps:为什么说“如果当前考虑的变量不管赋值为真还是假都会引起矛盾,可以证明整个2-SAT问题无解”??? 是这样的:比如说,某个点探测到的所有点,构成了一个集合。如果有必要调整前面的策略,那 阅读全文
posted @ 2017-07-20 10:32 Blue233333 阅读(197) 评论(0) 推荐(0)
摘要:一个编号在1000内的m条边的图,求从s到t恰好经过D条路径的最短路。 一开始什么想法都没有。。之前写过分层图套进去也怪怪的。。毕竟D<=10^6 苦思冥想睡了一觉后,还是没思路,查查题解,打开了新世界的大门 没有重边,提示我们构造邻接矩阵,最短路可以用floyd求出,但怎么用Floyd来“限边”? 阅读全文
posted @ 2017-07-13 17:56 Blue233333 阅读(149) 评论(0) 推荐(0)
摘要:n头牛,第i头要SPF(某个参数)在Lowi到Highi的药,药m种每种SPF为Vi,数量为Numi,求最多能满足几头牛。 方法一:什么都看不出来,只知道第i头牛能和一些药匹配,于是网络流,牛向药连容量1的边,起点向牛容量1,药向终点容量为药数量,最大流。 1 #include<cstdio> 2 阅读全文
posted @ 2017-07-11 17:25 Blue233333 阅读(210) 评论(0) 推荐(0)
摘要:有n个点m条边的无向图,s个信息表示点Ai没被损坏,且到点1的路径无法只经过“未损坏的点”,求到点1路径必经“损坏的点”的点的个数的最小值。 初看毫无头绪,画个图模拟下,1--2(--5--6)--3--4,点4和6发出信息,那么有两种方式安排“损坏的点”:点2,或者点5和点3,显然后者答案更小 也 阅读全文
posted @ 2017-07-11 11:15 Blue233333 阅读(202) 评论(0) 推荐(0)