![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
zyz_3_14159
这个作者很懒,什么都没留下…
展开
-
LightOJ-1034-tarjan
题目大意:有n个灯,需要把他们都点亮,接下来有m行u,v表示u点亮后,v也随之被点亮,问最少需要点亮几盏灯;题目解析:tarjan先把所有强连通分量求出来,map[i]表示第i个点在第几个强连通分量中,然后我们需要dfs每个强连通分量,如果发现map[u]!=map[v],也就是说两个强连通分量之间有一条边,那么令一边的就可以舍去,因为我们总可以在map[u]所在的分量中到达另一个分量的任意一原创 2016-10-21 16:24:14 · 253 阅读 · 0 评论 -
LightOJ-1094-图论,bfs
题目大意:给定一棵树,求它的加权直径;题目解析:求一棵树的直径,先bfs任意一个点返回一个点,再将那个点bfs一下即可;AC代码:#include#include#include#include#include#include#includeusing namespace std;const int maxn=30010;struct tree{ int to,v原创 2016-11-22 00:00:58 · 184 阅读 · 0 评论 -
LightOJ1086-Jogging Trails -状态压缩,欧拉回路
题目大意:给你一张单图,你需要遍历每条边最少一次,并且要回到一开始的起点,你可以自定义起点,问最少要走多少路;题目解析:首先我们要知道这道题目肯定是关于欧拉回路的;欧拉回路:无向图每个点的度数都是偶数,就可以正好遍历每条边一次并回到起点;所以本题就是要我们构造欧拉回路,我们把度数为奇数的节点构造出来,dp 的时候取出两个点,代价就是他们之间的最短路,所以我们就要用floyd把原创 2016-10-08 17:43:20 · 385 阅读 · 0 评论 -
LightOJ1009-Back to Underworld -二分图染色
题目大意:给你n个对,两个元素是不同阵营的,一共有两个阵营,问你一个阵营可能最多有多少个人;题目解析:二分图染色问题,dfs即可,最后每个二分图都取最大值相加就是答案;AC代码:#include#include#include#include#include#includeusing namespace std;const int maxn=20010;int cnt,原创 2016-10-05 22:33:28 · 290 阅读 · 0 评论 -
LightOJ-1063-tarjan
题目大意:求无向图中的割点数目;题目解析:用tarjan dfs的时候,如果枚举到某一边(u,v)其中low[v]>=dfn[u],就暂时设置is[u]=1最后枚举完的时候要判断这个点是否为根节点,如果是根节点并且儿子数目AC代码:#include #include #include #include #include #include using namesp原创 2016-11-08 20:21:47 · 161 阅读 · 0 评论 -
LightOJ1029-Civil and Evil Engineer-生成树
题目大意:给你一张图,求它的最小生成树和最大生成树的的总费用/2;题目解析: 用prime算法即可,求最小生成树的时候,只要每次取出长度当前长度最小的那条边,并且维护dist[]就可以了,因为是树状结构,肯定不会有环,最大生成树也是类似;AC代码:#include#include#include#include#includeusing namespace std;cons原创 2016-10-16 14:23:34 · 216 阅读 · 0 评论 -
LightOJ-1065-生成树
题目大意:给定一张图,有n个节点,m条路,可以在每个城市修建若干个飞机场,问最少花费多少,花费相同时,输出飞机场最多的解;题目解析:首先,这张无向图的每个强连通分量都至少有1个飞机场,为了方便计算,我们可以加一个根节点,使所有强连通分量都能与根节点连通,这样整张图就连通了,只要开始的时候预处理,多加n条边,使得图上每个点都与根节点连通就可以了,由此我们就要求出他的最小生成树,稀疏图用kursk原创 2016-11-08 15:03:14 · 230 阅读 · 0 评论 -
LightOJ-1049-图论
题目大意:给定一张有向图有n个节点,有n条边,任意一个点都有两条邻边,每次可以使一条边方向改变,问要使得任意两点都有路径最少花费是多少;题目解析:首先我们看n条边,n个点,且每个点有两条邻边,那么肯定是一个环,所以答案只有两种可能,一种是顺时针方向,另一种就是把其方向反向一边,就是把总花费减去前面那个即可;AC代码:#include#include#include#include原创 2016-10-27 12:57:33 · 422 阅读 · 0 评论 -
Codeforces731C-dfs
题目大意:给你若干个袜子,一共有k种颜色,要使得最终对应的一双袜子颜色都相同,你可以改变一只袜子的颜色,问你最少需要改变几次;题目解析:把所有的袜子想象成一个点,如果第i个和第j个袜子是一双的话,那么第i个和第j个就有一条边,那么预处理完成之后就会出现几个连通图,队友每个连通图,我们需要找出颜色最多的颜色,然后把这个连通图里其他颜色的袜子都变成这个颜色,这样次数才是最少,求连通的时候需要dfs原创 2016-10-17 13:04:07 · 261 阅读 · 0 评论 -
LightOJ1026-Critical Links-tarjan
题目大意:给你一张无向图,让你求桥的个数有多少个,桥就是一张连通图如果把某条边去掉,这张图就变成了两张;题目解析:用tarjan算法,其中dfn[i]表示dfs时到第i个点的时候的时间标号(从0开始),low[i]表示第i个点能追溯到dfn最小的那个点,那么在tarjan枚举的时候,只要low[v]>dfs[u]就是桥了,因为第v个点没有路能够通往u上面的图;AC代码:#include原创 2016-10-15 14:30:53 · 206 阅读 · 0 评论 -
LightOJ-1041-prime
题目大意:有若干个城市,给出m条路,如果cost不是0就代表这条路需要修,问要使这个图形成连通图,最少需要花费多少;题目解析:最小生成树,prime,因为不知道有多少个城市,先用map来映射一下;AC代码:#include#include#include#include#include#includeusing namespace std;const int inf=0x原创 2016-10-23 21:46:34 · 194 阅读 · 0 评论 -
LightOJ-1099-spaf,次最短路
题目大意:求一张图的次最短路,可以回溯;题目解析:次最短路肯定与最短路有关系,次最短路肯定是在最短路的基础上,不走一部分走了另一条边,最后又回到了最短路,所以我们需要枚举所有边,因为是稀疏图,用spaf较为好些;AC代码:#include#include#include#include#include#include#include using namespace std原创 2016-11-25 18:58:04 · 210 阅读 · 0 评论