图论
文章平均质量分 77
KinderRiven
这个作者很懒,什么都没留下…
展开
-
Sending email - dijkstra无向图 + 优先队列
学知识学的太死了、、、书上的模板是个wuia原创 2014-04-28 16:36:40 · 618 阅读 · 0 评论 -
【POJ】The Suspects(裸并查集)
并查集的模板题,为了避免麻烦,合并的时候根节点大的合并到小的结点。 #include #include using namespace std; const int maxn = 33333; int fa[maxn]; int num[maxn]; int n,m,t; void init(){ for(int i = 0; i < n; i++) {fa[i] = i; num[i]原创 2014-10-30 17:47:57 · 911 阅读 · 0 评论 -
【POJ-1988】Cube Stacking(并查集)
//===================================== // KinderRiven POJ 1899 //===================================== #include #include using namespace std; const int maxn = 33333; const int INF = 30000; int原创 2014-10-30 16:42:14 · 785 阅读 · 0 评论 -
705 Slash Maze
图的转化,想了N久没想出来,看了题解发现自己其实想的差不多了,但是想多了(ORZ流泪) 把图扩大两倍(就是一个斜杠占2个位置) 走8个发现,走斜对角的时候需要特判 写完一次就AC了 #include #include #include using namespace std; const int maxn = 80; const int maxd = 222; const int dir[原创 2015-03-21 17:40:04 · 639 阅读 · 0 评论 -
A Plug for UNIX(网络流模板题)
只是单纯的为了存模板 = =! #include #include #include #include #include #include #include #include #include #include using namespace std; const int INF = 1111111111; const int maxn = 444; const int maxd = 1111原创 2015-03-23 15:07:07 · 620 阅读 · 0 评论 -
【HDU】5195-DZY Loves Topological Sorting(拓扑 + 线段树 + 贪心)
每次找出入度小于K的编号最大点。 找的时候用线段树找,找完之后将这个点出度链接的点的入度全部减一 简直爆炸。。。 #include #include #include #include using namespace std; #define lson (pos<<1) #define rson (pos<<1|1) const int maxn = 100005; const int IN原创 2015-04-01 21:33:15 · 568 阅读 · 0 评论 -
第K短路
#include #include #include #include #include using namespace std; const int maxn = 1005; //图中点的个数 const int INF = 10000007; //无限大的边权 struct Edge{; int to,dist,speed; Edge(int to原创 2015-05-03 14:25:06 · 466 阅读 · 0 评论 -
【HDU】5222 Exploration(并查集+拓扑排序)
对于无向边使用并查集合并成一个集合,对于有向边使用判断是否存在环 唯一无语的地方就是看输入是百万级的,加个输入挂跑9s,不加挂跑了5s #include #include #include #include using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") const int maxn = 10原创 2015-05-05 23:11:52 · 1080 阅读 · 0 评论 -
【HDU 5294】Tricks Device(最短路+最大流)
题目大题: 求最多拆几条边图的1 -> n的最小距离不会变 求最少拆几条边图的1 -> n的最小距离会变 最短路 + 网络流的问题 求出最短路径图(包含所有最短路径的图) 之后用m - (拥有最少边数的最短路径) 得到一个解 之后将最短路径图中的边重新建图(流量为1)求最大流 感觉写的比较麻烦,时间也正好卡着过的。 #include #include原创 2015-07-27 20:29:00 · 645 阅读 · 0 评论 -
【POJ-2524】Ubiquitous Religions(并查集)
并查集。 #include #include using namespace std; const int maxn = 55555; int fa[maxn]; int vis[maxn]; int n,m,t; void init(){ for(int i = 0; i < n; i++) {fa[i] = i;} memset(vis,0,sizeof(vis)); } i原创 2014-10-30 18:00:18 · 800 阅读 · 0 评论 -
【UVA】658 - It's not a Bug, it's a Feature!(隐式图 + 位运算)
位运算处理很重要原创 2014-08-19 11:34:41 · 783 阅读 · 0 评论 -
【UVA】821-Page Hopping(Floyd)
模板题,求一个点到任何一点的距离,用Floyd就行了,结点不一定是从1 ~ n 的,所以需要记录结点的id 14063895 821 Page Hopping Accepted C++ 0.119 2014-08-19 10:00:27 #include #include #include #include #includ原创 2014-08-19 18:00:51 · 1145 阅读 · 0 评论 -
Play on Words-uva 精短欧拉回路
思路:先分析,特殊的字母,可能有的字母是当开头个数+1=当结尾个数,那么这个字母一定是开头,同理另一个特殊字母就是作为结尾的 之后其余的字母的话只可能是开头=结尾个数,如果有任何一个字母当开头的个数和结尾个数只差为2,那么回路一定不成立! 之后是构建DFS遍历 遍历的思路就是 用G[i][j]表示字母i,j是连通的! 遍历的起点我们分为2个步骤,一个是这个图是个环路 第二个是一条线性图原创 2014-03-26 23:03:46 · 546 阅读 · 0 评论 -
Sorting It All Out POJ(拓扑排序+floyd)
一个就是简单的拓扑排序,一个就是利用floydpandui原创 2014-05-22 15:30:27 · 565 阅读 · 0 评论 -
uva 11987 Almost Union-Find(带删除操作的并查集)
并查集的话,找到一个节点是无法访问他原创 2014-04-29 00:40:19 · 554 阅读 · 0 评论 -
Stockbroker Grapevine POJ【简单dijkstra】
优先队列的dijkstra,直接暴力枚举meiyige原创 2014-06-07 11:22:18 · 577 阅读 · 0 评论 -
Morning Walk-uva 经典的欧拉回路
题目的意思就是“一笔贯穿1->N的环状路线”, 这就是经典的欧拉回路问题 首先由于是环状的欧拉回路,要求每个节点的值必须为偶数【就是进入次数等于出去次数】 第二个就是利用dfs进行遍历,看能否贯穿整个路线,记住要标记节点是否访问过 dfs完了记得检验是否有节点没有访问过!,如果有的话说明没有遍历成功 /*本题目应该是一个单向的一笔画 也就是欧拉回路*/ #include #include原创 2014-03-27 21:12:03 · 582 阅读 · 0 评论 -
【UVA】247 - Calling Circles(floyd判断包闭,dfs输出)
floyd判断包闭原创 2014-08-18 20:26:01 · 948 阅读 · 0 评论 -
【UVA】1395-Slim Span
数学实在练不下去了,只能来水几个图论了,真想像D神一样来句:这道题很简单,直接AC就可以了。 大体思路:按照边的权值排序,枚举区间,利用并查集判断是否构成通路。 14042663 1395 Slim Span Accepted C++ 0.265 2014-08-15 02:11:53 #include #inclu原创 2014-08-15 10:12:55 · 878 阅读 · 0 评论 -
【UVA】1151 - Buy or Build(二进制枚举子集 + 并查集)
这题LRJ书上翻译的有问题,书上说两点之间的cost是两点的欧几里得距离,而题目要求两点的距离是两点欧几里得距离的平方。 其余就没什么好说的了,裸的并查集,需要注意的就是二进制枚举子集的问题。 二进制枚举子集: for(int i = 0 ; i < (1 << s) ; i++){ /*s是集合元素的个数*/ for(int j = 0 ; j < s ; j+原创 2014-08-17 18:42:07 · 1499 阅读 · 1 评论 -
【HDU 2586】LCA模板
在一棵树上 求2个点的最短距离,那么首先利用LCA找到2个点的最近公共祖先 公式:ans = dis(x) + dis(y) - 2 * dis(lca(x,y)) 这里的dis(x)指的上x距离根节点的距离 注意一些细节方面,比如数组的越界问题: #include #include #include #include using namespace std; typedef long l原创 2015-07-30 10:37:55 · 673 阅读 · 0 评论