![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 73
nw4869
i m just a kid
展开
-
POJ - 2377 Bad Cowtractors (最大生成树,Kruskal)
题目将最小生成树的条件改一下,让边降序排列进行贪心即可。教训:WA了2次。1、题目太简单,没有考虑全面(不连通的情况输出-1)就提交了。2、判断不连通的条件是第一个点与所有的点连通,但是如果直接用数组p[i]判断父节点的话是不对的,因为并不是所有的点的父节点都是树根。for(int i = 1; i //WA if(p[1] != p[i])最后将判断条件改成:原创 2014-02-21 16:30:36 · 645 阅读 · 0 评论 -
表达式树
#include using namespace std; //表达式树 const int maxn = 1000;int lch[maxn], rch[maxn]; char op[maxn]; //left-childen right-children operatorint nc = 0; //note count //找到最后一个运算符,然后递归建树int转载 2014-02-18 21:26:01 · 584 阅读 · 0 评论 -
ACMclub - 1123 确定排序序列(拓扑排序)
题目连接三种情况1、成环矛盾2、不能确定排序3、确定#define _CRT_SECURE_NO_WARNINGS#include #include #include using namespace std;int N, M;const int MAXN = 27, MAXM = 1000;int g[MAXN][MAXN], in[MAXN], a原创 2014-03-01 16:04:00 · 911 阅读 · 0 评论 -
ACMclub - 1122 关系推断 (拓扑排序, 并查集)
题目连接题目描述给你一些已经确定的元素之间的关系,请你判断是否能从这些元素关系中推断出其他的元素关系。将小于关系的两个点建立一个边。拓扑排序:(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它.(2)从网中删去该顶点,并且删去从该顶点发出的全部有向边.(3)重复上述两步,直到剩余的网中不再存在没有前趋的顶点为止.用原创 2014-03-01 11:48:08 · 1041 阅读 · 0 评论 -
ACMclub 2117 确定比赛名次(拓扑排序)
题目连接直接排序#define _CRT_SECURE_NO_WARNINGS#include #include #include using namespace std;int N, M;const int MAXN = 501, MAXM = MAXN*MAXN/2;int g[MAXN][MAXN], in[MAXN], ans[MAXN];int to原创 2014-03-01 16:15:53 · 694 阅读 · 0 评论 -
ACMclub - 2131 产生冠军(拓扑排序,map)
题目连接1、成环矛盾2、不全在同一集合则无法产生冠军。#define _CRT_SECURE_NO_WARNINGS#include #include #include #include #include using namespace std;int N, M;const int MAXN = 1001, MAXM = MAXN*MAXN/2;int g[MAX原创 2014-03-01 17:24:15 · 761 阅读 · 0 评论 -
POJ - 2236 Wireless Network (并查集)
Wireless NetworkTime Limit: 10000MS Memory Limit: 65536KTotal Submissions: 14777 Accepted: 6224DescriptionAn earthquake takes place in Southeast Asia. The ACM (As原创 2014-02-20 13:41:39 · 946 阅读 · 0 评论 -
最小生成树(MST) Kruskal 算法
1、将所有的边按从小到大排序2、依次将两点不在同一连通分量的边连接用到的数据结构:并查集//最小生成树 MST#include #include using namespace std; #define MAX 100int n, m; //n点, m边int u[MAX], v[MAX], w[MAX]; //边的两个端点,权重int p[MAX]转载 2014-02-18 23:49:41 · 889 阅读 · 0 评论 -
GUETOJ - 1119 How many ways(动态规划)
http://acm.guet.edu.cn/problemset/problem/1119#include #include #include using namespace std;const int MAX_N = 101;int N, M, T;int a[MAX_N][MAX_N], dp[MAX_N][MAX_N];bool in(int x, int y){原创 2014-03-05 21:55:48 · 666 阅读 · 0 评论 -
ACMclub - 1124 成语接龙 (最短路,SPFA)
题目连接给出N个字符串,要将字符串处理分离出前4个字符和后4个字符,然后建图。由于N最大是1000,O(N^2)是可以接受的,所以直接查找前面的点,判断是否符合条件了。不过还可以用HASH吧,这样时间复杂度会小很多,主要是SPFA的时间了,由于SPFA不太熟悉,不然用Bellman-Ford或者Dijkstra在这题的数据都可以的,不过Bellman-ford的O(NM)就有点危险了。原创 2014-02-28 23:29:56 · 1233 阅读 · 0 评论 -
POJ - 3268 Silver Cow Party (往返最短路,Floyd,Dijkstra 2次优化)
直接Floyd:TLE#define _CRT_SECURE_NO_WARNINGS#include #include #include using namespace std;int N, M, X;const int MAXN = 1001, MAXM = 100001, INF = 0x3f3f3f3f;//struct Edge//{// int u, v,原创 2014-02-25 15:20:57 · 1174 阅读 · 0 评论 -
POJ - 1703 Find them, Catch them (并查集2)
Find them, Catch themTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 27836 Accepted: 8486DescriptionThe police office in Tadu City decides to say ends t原创 2014-02-20 17:04:02 · 813 阅读 · 0 评论 -
POJ - 2395 Out of Hay (最小生成树, Kruskal)
题目传送门英语是硬伤啊……理解错题目,还以为要求的是最小生成树的从点1出发的最长路(N个边的长度相加),提交上去却WA了……不可能错啊,去百度一下翻译……没找到……只好看一下别人的代码了。咦,怎么直接Kruskal就完了??仔细一看才发现题目要求的是最小生成树的最长的一条边……#define _CRT_SECURE_NO_WARNINGS#include #includ原创 2014-02-21 18:47:36 · 669 阅读 · 0 评论 -
POJ - 1258 Agri-Net (裸Kruskal)
题目传送门裸Kruskal因为数组没开够大,RE了两次……把应该用MAXM的开成MAXN了。。。。int w[MAXM], u[MAXM], v[MAXM];int p[MAXN], r[MAXM];只有并查集的才用MAXN 啊!!#define _CRT_SECURE_NO_WARNINGS#include #include #in原创 2014-02-21 15:08:18 · 646 阅读 · 0 评论 -
并查集(Union-Find Set)
优化1:将遍历过的结点都改成树根的儿子优化2:记录树的高度,将小树连向大树//并查集int par[MAX], rak[MAX]; //父结点, 树的高度//初始化n个元素void init(int n){ for(int i = 0; i < n; i++) { par[i] = i; rak[i] = 0; }}//查询树的根int find(转载 2014-02-19 00:04:17 · 842 阅读 · 0 评论 -
AOJ - 2224 Save your cat (最大生成树,Kruskal)
传送门题意:给出一个图,每个环内至少有1只猫,问要砍掉那些边,使得所有的猫获救(无环),而这些边的总长最小。图中可能不止一棵树。只要找出最大生成树,那么剩下的就是边长最小的了。本来想先算出最大生成树的和,在用总的减去它就能算出答案了,不过想想,直接求也是可以的:ans += 同一连通变量的边(比较短的边)。#define _CRT_SECURE_NO_WAR原创 2014-02-22 21:53:32 · 908 阅读 · 0 评论 -
最短路算法Dijkstra
邻接矩阵,算法复杂度:O(V^2)://input file6 80 2 100 4 300 5 1001 2 52 3 503 5 104 3 204 5 60g中INF表示此边不存在#define _CRT_SECURE_NO_WARNINGS#include #include #include int const MAXN = 1000, M原创 2014-02-24 08:47:29 · 954 阅读 · 0 评论 -
POJ - 2139 Six Degrees of Cowvin Bacon(任意两点最短路,Floyd)
题目传送门题意:奶牛们最近要拍电影了……1、若两个的奶牛一起工作则,他们相互的度(degrees)为;2、若两只奶牛a、b不一起工作,但与另有一只奶牛都和他们工作,则a、b的相互的度为2。求奶牛的与其他奶牛的度的平均值的一百倍的整数。转换成图则是求一个点到其他点距离的平均值的一百倍。(任意两点最短路,Floyd)#define _CRT_SECURE原创 2014-02-24 12:48:42 · 1025 阅读 · 0 评论 -
POJ - 3259 Wormholes(判断负环, Bellman Ford,SPFA)
虫洞能够时光倒流,判断能否在回到出发的位置的时候在出发的时候之前。(判断是否存在负环)初学最短路,尝试着用了三种方法判断:1、Bellman Ford (令d全部为0,仅用来判断负环) OJ测试得157MS2、Bellman Ford 结束后再来一轮松弛若松弛成功则存在负环。 235MS3、Bellman Ford 用队列优化过的SPFA,判断是否存在一个点同队大原创 2014-02-24 20:06:15 · 1460 阅读 · 0 评论 -
最短路总结:Dijkstra,SFPA,Bellman Ford判负环,Floyd
Dijkstra:贪心思想:1、找到最短距离已经确定的顶点,从它出发更新相邻顶点的最短距离。2、此后不需要再关心1中的“最短距离已确定的顶点”。优先队列优化:在队列中取出d值最小的结点x,然后从x出发更新所有的边的d值。初始化:first[u] 结点u的第一条边next[i] 边i的下一条边d -> INF时间复杂度O(elogv)#include原创 2014-03-21 16:13:25 · 2001 阅读 · 0 评论