![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 76
LBJHan
经历过就是财富
展开
-
C语言建树
话不多说,先看代码:#include <stdio.h>#include <stdlib.h>#include <string.h>struct TreeNode{ //结构体用来储存树结点,包括节点的值data,分别指向左孩子右孩子的指针; int data; struct TreeNode *left, *right;};vo...原创 2017-07-28 09:08:14 · 2816 阅读 · 2 评论 -
二分图匹配——匈牙利算法
先上几个概念:二分图:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。如下图:最大匹配:在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配。选择这样的边数最...原创 2019-03-19 21:50:33 · 255 阅读 · 0 评论 -
Park Visit HDU - 4607 (树的直径)
Park Visit 题目链接:HDU - 4607 题意:公园里有n个景点,n-1条距离相等的将这n个点构成一棵树,问任选一点开始参观公园,可以逛完k个景点所要走的最短路径;思路:如果树的直径为m,即树的叶节点到叶节点之间最长距离为m, 当k<=m+1时,不用走回头路,这样是最短的,此时最短路径为k-1; 当k>m+1时并定会走重复的路,我们的目标就是让重复的路最短;要想...原创 2018-07-29 08:04:21 · 262 阅读 · 0 评论 -
Destroy Walls HDU - 6187(最大生成树)
Destroy Walls 题目链接:HDU - 6187 题意:现有一个图,一个人在图中某一点,要使此人能够达到任意位置,需要拆掉的边最少且付费...原创 2018-07-15 09:34:44 · 219 阅读 · 0 评论 -
Counting Stars HDU - 6184(三元环判定)
Counting Stars 题目链接:HDU - 6184题意:现有一个图, 在图中找出特定的集合A,A满足以下条件:1.A中有四的点, 五条线;2.其中四条边能够成一个四边形,另一条边是该四边形的对角线;如图:很明显这是由两个有公共边的三...原创 2018-06-06 09:10:28 · 258 阅读 · 0 评论 -
The Unique MST POJ - 1679
The Unique MST 题目链接:POJ - 1679题意:判断图的最小生成树是不是唯一的;先求出最小生成树, 然后枚举去掉最小生成树的一边, 再求一边最小生成树;#include <cstdio>#include <...原创 2018-05-20 18:42:35 · 162 阅读 · 0 评论 -
Drainage Ditches POJ - 1273(网络流最大流模板题)
Drainage Ditches 题目链接:POJ - 1273题意:给出有向图, 求由源点到汇点的最大流量;网络流最大流的模板题;#include <cstdio>#include <cstring>#inclu...原创 2018-05-20 16:42:40 · 157 阅读 · 0 评论 -
POJ 3013 Big Christmas Tree
Big Christmas Tree 题目链接:POJ - 3013题意:要求建一棵圣诞树, 1是根节点, 每条边的权重是这条边下的所有子节点权重之和*边的长度;要建树的代价最小;对于每个节点来说, 他提供的代价就是他到根节点的距离*自身权重...原创 2018-05-20 14:57:58 · 230 阅读 · 0 评论 -
Paint the Grid Again ZOJ - 3780(拓扑排序)
Paint the Grid Again 题目链接: ZOJ - 3780题意:一个N*N的格子, 一开始是空白的, 每次可以将一列变为O或将一行变为X;给出最终的状态, 问最少需要多少个操作才能将白纸变为给出的状态, 若可以按字典序输出, ...原创 2018-04-26 16:59:38 · 190 阅读 · 0 评论 -
Machine Schedule POJ - 1325(二分匹配, 最小点覆盖)
题目链接: POJ - 1325题意:k个job, 2个机器A, B, 初始状态都是0模式, 每个工作可以在A机器的x模式或B机器的y模式下完成, 求最少重启几次机器可以完成所有工作;因为初始状态是0模式, 所以可以在0模式下完成的工作不需要记录, 对AB的模式建边, 如果j工作可以在A的x或B的y下完成, xy建边;求一个最小点覆盖, 即二分图的最大匹配;#include <iostrea...原创 2018-04-13 10:42:43 · 152 阅读 · 0 评论 -
QS Network(最小生成树)
QS Network题意: 一种叫QS的生物,可以相互沟通,聊天;可以两QS直接聊天,也可以让人转达;每两个生物之间都有一天网线,价值不一,每个QS都有一个类似router(路由器)(每个QS的router都不同)的东东,聊天的时候必须用到,而且每和一个QS聊天就需要一个router;现在需要每个QS都可以聊天而且花费最少,求最少费用,费用包括网线和router的钱;示例:原创 2017-08-01 12:10:24 · 501 阅读 · 0 评论 -
Til the Cows Come Home (最短路径)
题意:N个点,T条边,求起点到终点的最短路程;第一次WA,样例都过,一直找不出哪里错了,查题解才明白,一开始没有考虑重边问题;用Dijkstra,注意重边问题,就过了;#include #include #include #include #define INF 0x3f3f3f3f; //无穷大;int book[2005]; //标记点原创 2017-08-01 15:47:55 · 426 阅读 · 3 评论 -
Building a Space Station (Kruskal算法)
题意:有n个space station,每个space station都是一个球体,已知球的坐标,半径,(x,y,z,r都是double型的)现在要求在space station之间建个通道让所有space station都连接起来,求最小需要建立的通道;注意:如果两个space station相接触或相交就不需要建立通道,即通道为0;很明显求最小生成树;space station间的距离:(原创 2017-08-03 09:52:08 · 350 阅读 · 0 评论 -
Silver Cow Party (邻接表)
题意:一群奶牛开party,在X奶牛家开,所有奶牛都要去,找出每头奶牛到X和从X回家的最短路径和,输出路程最长的奶牛走的路,图是单向图;回家的路好求,单源最短路,Dijkstra算法就可以了,而每头奶牛daoX的最短路不好求,但逆向思考一下,把图改成逆向图,还是X到其他点的单源最短路;之前一直用邻接矩阵存图,刚学会用邻接表(也有叫链式前向星的,实在没明白两者有啥区别)存图,写一下代码:原创 2017-08-03 17:46:50 · 232 阅读 · 0 评论 -
hdu 1166 敌兵布阵(线段树)
刚学习了线段树,找个模板题练练手;先说什么是线段树:(以下定义来自百度百科) 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的原创 2017-08-07 16:26:45 · 209 阅读 · 0 评论 -
Just a Hook (线段树,区间更新)
hook有三种stick,分别为1号,2号, 3号,长度分别为1,2,3;T个测试样例, N个stick,Q个操作,每次操作改变x-y区间内stick的值,最后求和;话不多说,代码奉上:#include #include #include #include #define MAX 100000+5using namespace std;int arr[MAX];原创 2017-08-08 13:06:59 · 206 阅读 · 0 评论 -
Color the ball (线段树,区间更新模板题)
其实是很简单的一道题,由于一开始不会线段树的区间更新所以一直WA,网上题解大部分都是树状数组搞得,道不同啊,所以一直自己死扣,终于A了,真心不容易;好了,先说说线段树的区间更新,这是点更新的扩展,点更新很简单,当然你可以用个循环加点更新,不过,效率太慢,如果有上千条上万条操作肯定T了,所以伟大的码农们想到了一个方法,懒惰标记,简单来说就是更新的时候你用到那一层就更新到那一层,用不到的就标记下来原创 2017-08-09 15:11:43 · 270 阅读 · 0 评论 -
拓扑排序
一:定义:拓扑排序: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之...原创 2019-03-18 20:39:56 · 177 阅读 · 0 评论