图论
撒旦即可
研究CV的菜狗
展开
-
poj3648(2-sat)
解题思路:有关2sat的部分详见我写的新的感想。大致来讲一下这道题的构图思路及意义吧。由于新娘不希望一对夫妻坐在对面,所以就是一个丈夫,妻子二选一的题目,非此即彼,所以可以用2sat来做。复杂度最高也O(NM),N为人数,M为关系数,近似于tarjan的复杂度。然后新娘也不希望有奸情的一对人坐在其对面。例如输入有奸情的为:2h 3w,则新娘的对面如果做了2h,则新娘对面也必须做3h,即连一条边2h...原创 2019-02-22 11:31:26 · 162 阅读 · 0 评论 -
HDU4966(确定原点的最小树形图)
题意:总共有n门课,每门也有一个最高等级ai,一开始每门都是等级0。接着有m个提升班,每个班级有a l1 b l2 w,表示只有第a门课程在l1及以上时才能上,花费代价w,可以讲第b门课程提升到l2等级。现在就将所有的课程提升到最高等级需要付出的最小代价,若无法达到则输出-1。解题思路:裸的确定原点的最小树形图。构图思路:所有课程的每个等级视为一个节点,对于每门课程的等级i,可以建一条对等...原创 2019-05-09 00:16:41 · 137 阅读 · 0 评论 -
图论邻接举证的应用
一个图的邻接矩阵为A则A^n中,A[i][j]表示的是从i出发走到点j走n步,有多少种走法可以有两种用法1。判断n步以后能不能走到,复杂度为O(n^3)2.我觉得概率Dp中也可以用来计数,就是复杂度还是O(n^3)...原创 2019-03-20 22:49:14 · 179 阅读 · 0 评论 -
poj2631(树的直径)
解题思路:具体做法就是先随便选一个点,进行bfs或dfs,然后距离这个点最远的点,一定是树直径中的一个端点。然后再从这个端点bfs或dfs求得直径。证明详见https://www.cnblogs.com/a-clown/p/6131346.html#include<cstdio>#include<cstring>#include<vector>#...原创 2019-03-10 16:34:51 · 208 阅读 · 0 评论 -
poj2762(强连通分量缩点tarjan+拓扑排序思想)
思路:先用tarjan算法,把各个互联的强连通分量当成一个点(缩点),然后再对这些缩点使用拓扑排序思想,即每去掉一个入度为0的点后,剩下点入度为0的点必须只能是一个。#include<cstdio>#include<cstring>#include<stack>using namespace std;struct node{ int u,v,n...原创 2019-02-21 00:28:56 · 163 阅读 · 0 评论 -
poj3057(经典二分匹配)
解题思路:本来这道题可以用二分来做,更加直观一些。但是挑战上又介绍了优化的方法,所以试了一下。一些重要的细节代码里注释了。大概思路这里讲一下:就是随着时间的增加来添加点(不同时刻的门)和边。然后添加的新的时刻的门去和人进行匹配,如果匹配上了就代表在这个时刻这扇门可以送走一个人。随着时间的增加,新时刻的门继续把剩余的人给匹配掉。直至全部人匹配完,或者时间到为止。这里的时间最长是n*m,即输入矩阵的大...原创 2019-02-18 23:20:27 · 302 阅读 · 0 评论 -
poj3683(2SAT)
解题思路:大概讲一下建图思路:首先将一个婚礼分成有个点,分别表示在开头神父到,和在末尾神父到。然后判断各个婚礼之间的矛盾情况,按2SAT传统连边。#include<cstdio>#include<cstring>#include<stack>#include<algorithm>using namespace std;const in...原创 2019-02-24 01:00:27 · 84 阅读 · 0 评论 -
2SAT的一点理解
首先大概说一下2sat的步骤1.用tarjan求出强联通分量,这一步是因为如:1-->2 , 2-->3, 3-->1这么三组关系,(i-->j代表的意思是选择了i,则必须也要选择j),这样三组关系就是强联通分量,也意味着选择了其中一个数字,其他的数字也将必须被选择。2.判断一个强连通分量中有没有两个选项都有,比如1和1'都出现在一个全连通分量中,那肯定无解,因为...原创 2019-02-23 21:57:21 · 236 阅读 · 0 评论 -
HDU差分约束
解题思路:见https://www.cnblogs.com/caiyishuai/p/9547829.html大概的构图方法讲一下输入:a b gt(或lt) c则 gt时 a+b ----->a-1 权值为-c-1; lt时 a-1 ----->a+b 权值为c-1;由于以上点之间可能不连通,所以得再构造一个超级原点,到其他个点的权值为0.这样用...原创 2019-02-13 10:55:01 · 115 阅读 · 0 评论 -
HDU3376(最小费用最大流)
解题思路:用拆点的方法,同一个点拆成两个,容量为1.这样保证每个点只能流过一次。写费用流时超时,后来把queue的初始化写到函数外了,省的每次调用函数都要初始化,然后就不超时,过了。#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using names...原创 2019-02-18 17:32:59 · 578 阅读 · 0 评论 -
poj3723(kruskal最大生成树)
解题思路:最小生成树裸题,由于边的数目比较少,所以选用复杂度为O(ElogV)的kruskal算法,和最小生成树的区别是边的排序由大到小排。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;struct e...原创 2019-02-13 00:23:04 · 243 阅读 · 0 评论 -
HDU1688
解题思路:嗯这种写法逻辑比较清楚,适合做模板。再来解释一下以下方法做出来的次短路是一定大于最短路的。#include<vector>#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define inf 0x3f3f3f3fusi...原创 2019-02-12 23:13:58 · 170 阅读 · 0 评论 -
HDU3191(次短路)
解题思路:这是我从打ACM起做的心态最炸裂的一道题。一开始用A*求K短路写,超内存。然后就老老实实用次短路来写,但为什么我会在这么简单的一道略水的题上卡了半天啊。。。。。可能是我平时一直记忆的模板有问题吧。为什么优先队列中距离相等时,要按标号的顺序排列这一点,我到现在都还是云里雾里的,算了,抽时间换个更加明了的写法吧。#include<cstdio>#include<cs...原创 2019-02-12 19:34:09 · 181 阅读 · 0 评论 -
HDU1083(匈牙利算法二分图匹配模板)
解题思路:匈牙利算法模板套一下即可。就是说每门课都要有一个学生当课代表,一个学生只能当一个课代表。#include<cstdio>#include<cstring>#include<iostream>using namespace std;int map[305][105],chk[305],match[305];int n,m;int dfs...原创 2019-02-18 11:14:23 · 196 阅读 · 0 评论 -
HDU1595(最短路)
解题思路:反正就是枚举去掉最短路上的边,然后依次求最短路,取最大值即可。我试了两种写法,一种是简单的用邻接矩阵表示,轻松过了。用邻接表,超时。其实写起来也是邻接表的难度大!!作孽啊,它的测试数据有不少重复的边啊,用矩阵可以滤掉一大部分。切记切记!!!我的:#include<cstdio>#include<cstring>#include<iostream...原创 2019-02-12 00:44:52 · 190 阅读 · 0 评论 -
hdu3478(二分图着色)
解题思路:见https://www.cnblogs.com/kkkkahlua/p/7660024.html简单说就是只要不是二分图就有可能出现在任何地方,是的话,那未来的行动模式就确定了。#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>...原创 2019-02-11 20:39:53 · 202 阅读 · 0 评论 -
hdu2121(不确定起始点的最小生成图,模板,学习)
题意:要你在一些城市中选一个做首都 , 要求首都都能到其他城市 , 道路花费要最少 , 且道路都是单向的 , 这个时候就要用到最小树形图算法了 , 而且是不固定根.解决的问题:最小生成图就是要求从某个原点能到其他所有点,且构成这颗树的边权和最小。算法复杂度O(VE)关于算法实现步骤详见https://www.cnblogs.com/xzxl/p/7243466.html#incl...原创 2019-05-09 00:20:37 · 167 阅读 · 0 评论