![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 81
Colin_27
这个作者很懒,什么都没留下…
展开
-
hdu4756 Install Air Conditioning
次小生成树的变形dfs得到最佳替代边假设两个各自连通的部分分别为树A,树B用dp[i][j]表示树A(i点所在的树) 到 树B(j点所在的树)的最近距离(此然就是最佳替代边)注意0号节点相连的边不会出错原创 2013-10-24 18:14:35 · 769 阅读 · 0 评论 -
hdu3715 Go Deeper
要求输出可能达到的最大值,显然二分x数组只能为0或1,可以联想到twosat 只有当 x[a[dep]] + x[b[dep]] != c[dep]时候才能进入下一层 则可以根据这个条件加限制c == 0时 a b 不能同时为0c == 1时 a b 必须相等c == 2时 a b 不能同时为1原创 2013-10-22 14:20:50 · 597 阅读 · 0 评论 -
hdu4587 TWO NODES
问一个无向图中去掉任意两点后剩下的连通分量的个数最大值枚举第一个删去的点,在剩下的子图中求割点注意,剩下的子图可能不连通,那么就要对每个连通块求割点计算删去一个点后剩余连通分量个数 left 的方法为:tarjan算法中的时间戳数组dfn[]若为0说明是新的连通分量求删去割点后剩余连通分量个数:tarjan算法中将判断是否为割点的bool 数组改为int类型,并将iscut[i] = 1 改为 iscut[i]++ 即可那么对于非根节点,删去后剩余个数为iscut[i] + 1(子树个数加上父节原创 2013-10-30 16:46:13 · 998 阅读 · 0 评论 -
Uva1514 Piece it together
二分匹配 当时一看题觉得是最大流 就不停的试 两百行代码敲完 调试完 才发现建图不对.....后来想想 其实可以把黑色小块拆成两个 水平方向及竖直方向 两个方向分别向各自方向白色小块连边那么匹配完全后才能输出yes 否侧就是no唉 思想完全不够啊 拆点都没有想到! 牢记还有就是2sat可以做 可以试试 但感觉建图比匹配难原创 2013-10-26 22:40:47 · 814 阅读 · 0 评论 -
图论模板整理
大部分来自LRJ//无向图求割点int pre[maxn], low[maxn], dfs_clock;vector G[maxn];int iscut[maxn];int dfs(int u, int fa) //求出所有点i是否为割点iscut[i]{ int lowu = pre[u] = ++dfs_clock; int child = 0;原创 2014-07-15 11:10:23 · 1278 阅读 · 0 评论 -
hdu4360 spfa+拆点
题目要求必须按照L O V E 的顺序行走,且必须至少有一个完整的LOVE,说明可以经过同一个点多次对每个点拆分为4个点,分别为从L,O,V,E到达。起始点看做是从E到达的spfa时发现当前点距离相同,比较经过的边数,此时若边数更大,也要入队列!因为要更新后面的点经过的边数trick 是点可以有自环,当N = 1时1 41 1 1 L1 1 1 O1 1 1 V1原创 2014-07-10 15:19:53 · 986 阅读 · 0 评论 -
hdu4888 Redraw Beautiful Drawings
14多校第二题网络流 分别以行,列作为结点建图i行表示的结点到j列表示的结点的流量便是(i, j)的值跑遍最大流 若满流了便是有解 判断是否unique 就是在残余网络中dfs,走可以增加流量的边,找到环即不唯一dfs的时候一定要回溯!!。。。#include #include #include #include #include #includ原创 2014-07-30 11:51:18 · 816 阅读 · 0 评论 -
最大流模板
Dinic算法-------来自LRJ/////支持重边//////ISAP算法 效率较高原创 2013-10-22 16:33:27 · 959 阅读 · 1 评论 -
SGU194 Reactor Cooling 有下界最大流
学习别人的方法。大致是:无源汇的最大流 : 新建源点,汇点,sum[i]为每个点进来的下界流之和减去出去的下界流之和,如果sum[i] > 0,由源点向该点建一条边,上界为sum[i],下界为0如果sum[i] #include #include #include #include #include #include #include #include #inc原创 2014-08-06 11:56:51 · 1127 阅读 · 0 评论 -
hdu4115 Eliminate the Conflict
题意:对,又是Alice和Bob玩起了石头剪刀布。Alice知道Bob每回合要出什么,现在对于Alice 有m个限制,每个限制由a,b,k三个数字来描述。k == 0,则第a局和第b局 Alice出的相同。k==1,则代表第a局和第b局Alice出的必须不同。求是否存在可以使得Alice每局不输(平或胜)且符合以上m个要求的方案。石头剪刀布,看似有三种选择,但是仔细分析发现,由于Bob出什么已定,那么对于Alice来说只有选择平或胜两种选择,那么可以联想至Twosat根据这些限制建图,twosa原创 2013-10-23 19:31:24 · 630 阅读 · 0 评论 -
hdu4085 Peach Blossom Spring
看题表示不会,百度后发现是斯坦纳树,又没见过...大致是状态DP通过枚举子树或者最短路来状态转移若两种状态集合没有交集,则可以直接合并 dp[ i ][ j ]=min{ dp[ i ][ j ],dp[ i ][ k ]+dp[ i ][ l ] },其中k和l是j的两个互补的子集若i和i'之间有边相连, 那么可以通过spfa的三角不等式进行状态转移 dp[ i ][ j ]=min{ dp[ i ][ j ],原创 2013-10-22 13:00:06 · 690 阅读 · 0 评论 -
uva11374 Airport Express
这道题和hdu4081Qin Shi Huang's National Road System很像 都是需要枚举免费的那条路主要是要两次预处理 一次是起点到任一点的最短路 再是终点到任一点的最短路那么对于每一条免费路线(u, v) 答案便是dis[u](起点至u) + dis[v](终点到v) + w(u, v)原创 2013-10-25 22:57:17 · 694 阅读 · 0 评论 -
hdu3666 THE MATRIX PROBLEM
这道题题号真吉利啊 这道题是判断是否存在两个数组a,b是的对给定的矩阵c满足L <= c[i][j] * a[i] / b[j] <= U 把乘除号 看作加减号 (或者直接两边取log)那么就是两个不等式 转换成差分约束系统判断是否存在负圈就好spfa下来会超时 ,有两种方法可以解决 一是将入队次数改为根号n即可 (不要问为什么,我也不知道哪里看到过) 不推荐二是用dfs判断 速度也很快原创 2013-10-22 21:16:54 · 725 阅读 · 0 评论 -
uva11090 Going in Cycle!!
题意:找到图中平均权值最小的回路思路:假设答案是val 那么图中的边权值减去val,原来的回路便会成为负圈 val的值可以通过二分+spfa判负圈完成原创 2013-10-25 23:03:08 · 712 阅读 · 0 评论 -
hdu4081 Qin Shi Huang's National Road System
次小生成树的变形 求出最小生成树,然后DFS把最小生成树变为有根数,同时计算任意两个节点间的瓶颈路maxcost[u][v](即u,v路径上的最长边),方法如下:当访问至一个新节点u时,枚举所有已访问过的节点x,则maxcost[x][u] = max( maxcost[x][v], w[u][v]),其中v是u的父节点。时间复杂度为O(n2)那么此题便可以枚举免费的那条路,若这条路在最小生成树上则B 为mst - G[u][v],否则 B = mst - maxcost[u原创 2013-10-22 12:37:25 · 742 阅读 · 0 评论 -
hdu3681 PrisonBreak
一来想用普通BFS实现,无奈超时,怒换思路遍历所有的点且仅一次,可转化为TSP问题变形求满足的最小值,显然二分之推荐一个TSP好的博客,一看就懂 点击打开链接原创 2013-10-22 11:25:10 · 791 阅读 · 0 评论 -
最小费用最大流模板
最小增广路算法ZKW算法原创 2013-10-22 16:38:01 · 1240 阅读 · 0 评论 -
hdu3729 I'm Telling the Truth
匹配模版题看最大匹配数是否等于人数要求输出字典序最小 那么反序匹配就好了#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include原创 2013-10-22 20:43:44 · 708 阅读 · 0 评论 -
uva11248 Frequency Hopping
题意:给定一个有向网络, 每条边均有一个容量。问是否存在一个从点1到点N,流量为C的流。如果不存在, 是否可以恰好修改一条弧饿容量, 使得存在这样的流。先求最大流mf,如果mf >= C,则直接输出possible若暂时不存在,那么便是最小割中的边限制了增广路的产生,可以通过修改其中的弧容量(设为C足矣),再求最大流,此时若大于C则此弧可以不过这样会超时其实最大流在此题中没有意义,所以当流量>=C的时候就可以停止增广了还有就是保留第一次增广后的各条边中的流量,以后在此基础上进行增广即可原创 2013-10-22 17:47:43 · 714 阅读 · 0 评论 -
hdu4940 Destroy Transportation system
给你一个强连通的有向简单图,每条边有D, B两个权值,设S为点集的一个非空真子集问:是否对于任意的集合S,都有sum (D(i, j))比赛的时候完全没有思路啊。。。最大流果然还是白板思路:将D值作为边的下界,D + B作为边的上界,如果存在可行流,那么对于任意集合S都有流量小于等于边的容量上界,大于等于边的容量下界,即D(i, j) 这就将问题转化为了裸的有下界的最大原创 2014-08-13 10:19:45 · 870 阅读 · 0 评论