
===图论===
LOI_Q
“愿我们合上笔盖的刹那,有着侠客收剑入鞘的骄傲。”
展开
-
Codevs 2370 小机房的树
题目描述 Description小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你要你设计一个程序来找到这条路,要求你原创 2017-07-20 14:57:45 · 480 阅读 · 0 评论 -
2017.9.9 图论 — 最小生成树
Kruskal: 按照边的权值的顺序从小到大查一遍,若不产生圈(重边等),则把当前边加入生成树中。 O(|E|log|V|)#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,m;int fa[10005];struct bian{ int f,t,d;}e[10005];原创 2017-09-09 08:49:39 · 337 阅读 · 0 评论 -
2017.9.9 图论 — 最短路(修邻接表bug---10.20)
Dijkstra://不能解决有负边权的图//从起点一层层向下更新//与spfa(靠队列实现)相似,源点是一定的,but 实现方式不同 #include<cstdio>#define Max 0x3fffffffint map[1005][1005];int dis[1005];void dijkstra(int n){ int visit[1001]={0}; int原创 2017-09-09 08:58:53 · 342 阅读 · 0 评论 -
Codevs 1231 最优布线问题
题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的。为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地通过其他计算机实现和另外一台计算机连接。为了使得任意两台计算机之间都是连通的(不管是直接还是间接的),需要在若干台计算机之间用网线直接连接,现在想使得总的连接费用最省,让你编程计算这个最小的费用。输入描述 Input Des原创 2017-09-24 07:32:00 · 294 阅读 · 0 评论 -
并查集 (不相交集数据结构)
来源于《啊哈!算法》//给出几个人的联系,求有几个团伙 #include<cstdio>using namespace std;int f[1000]={0},n,m,k,sum;//sum:团伙数 //初始化,数组里面存自己数组下标的编号 void init(){ int i; for(int i=1;i<=n;i++) f[i]=i; return ;}原创 2017-09-24 08:34:13 · 596 阅读 · 0 评论 -
Codevs 1073 家族
题目描述 Description 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。输入描述 Input Description 第一行:三个整数n,m,p,(n<=5000,m<=5000,p<=50原创 2017-09-24 09:54:49 · 348 阅读 · 0 评论 -
“家族”“团伙”小总结 (简称"小""家""伙") +再来一波关押罪犯
家族:纯裸并查集,版子题 只需要知道谁与谁有亲戚关系,只合并是亲戚的,保证他们一个祖先即可,其他的不用管,祖先是谁不影响最后“yes or no”的判断。 if x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。 but 若xy不是亲戚,xz不是亲戚,那不能确定yz是不是亲戚 只需要一种关系即可确定答案团伙: 给出一系列关系原创 2017-09-24 20:41:27 · 372 阅读 · 0 评论 -
Codevs 2597 团伙
题目描述 Description 1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:我朋友的朋友是我的朋友;我敌人的敌人也是我的朋友。 两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。输入描述 Input Description 输入文件gangs.in的第一行是一个整数N(2<原创 2017-09-24 21:03:54 · 461 阅读 · 0 评论 -
Codevs 1069 && 洛谷 1525 关押罪犯 并查集
……原创 2017-09-27 19:30:56 · 459 阅读 · 0 评论 -
树+最小生成树
**树 ** 树: 不包含回路的连通无向图(从一个点到达另一个点,若想回去,只能原路返回),即任意两个节点间有且只有一条路径的无向图特性: 1.一条树中的任意两个节点有且仅有唯一的一条路径连通 2.一棵树中如果有n个节点,那么它一定恰好有n-1条边 3.在一棵树中加一条边将会构成一个回路部分定义: 根结点(祖先):没有父结点 叶结点:没有子结点 内部结点:既不是根结点,也不是叶结点原创 2017-09-29 09:48:33 · 473 阅读 · 0 评论 -
最近公共祖先:LCA及其用倍增实现 +POJ1986
原网址:http://www.cnblogs.com/sllr15/p/5164996.html (侵权请告知,必删)Q:为什么我在有些地方看到的是最小公共祖先?A:最小公共祖先是LCA(Least Common Ancestor)的英文直译,最小公共祖先与最近公共祖先只是叫法不同。Q:什么是最近公共祖先(LCA)?A:最近公共祖先的概念是很好理解的。首先,你需要脑补出一棵树(它可以是二叉树,也可转载 2017-11-03 07:31:52 · 361 阅读 · 0 评论 -
Codevs 1074&&洛谷 P2024 食物链
题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B吃 C,C 吃 A。现有 N 个动物,以 1 - N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是“1 X Y”,表示 X 和 Y 是同类。第二种说法是“2 X Y”,表示 X 吃 Y 。此人对 N 个动物原创 2017-10-27 11:31:05 · 342 阅读 · 0 评论 -
图的存储结构之邻接表(详解)
原地址:http://www.cnblogs.com/ECJTUACM-873284962/之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。4 51 4 94 3 81 2 52 4 61 3 7第一行两个整数n m。n表示顶点个数(顶点编号为1~n),转载 2017-10-09 19:49:00 · 10911 阅读 · 1 评论 -
拓扑排序
*1、定义: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。 即:按照出现的先后顺序排列**2.步骤: (1) 选择一个入度为0的顶点并输出;(2) 从图中删除此点及其所有出边,即该点及所有与该点相邻的点的入度-1。循环结束后,若输出原创 2017-08-16 14:09:00 · 332 阅读 · 0 评论 -
【总结】图论 · 知识点
最短路:1.spfa:/从原点开始,每次找相邻的点入队,更新它的最短路 注意:要初始化:nxt,head(first),dist,vis至于为什么进队两次:因为有些点左右都有邻点,可能会被邻点更新两次,所以入队次数<=2//(自己的理解)而且每次更新完dist点入队后又以它开始spfa更新邻点,所以一定会出队一次 /适用范围:无负环但可以有负边的有向图, 不带负边的无向图/+SLF优化:使用原创 2017-11-04 10:00:11 · 869 阅读 · 0 评论