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