随笔分类 -  最小生成树

摘要:很好的最小生成树的模板题,由于用邻接矩阵存储的,故用prim算法比较方便。AC code:prim 1 #include <iostream> 2 using namespace std; 3 int n, q, sum; 4 const int MAX = 101; 5 const int INF = 100000; 6 int map[MAX][MAX], vis[MAX], dis[MAX]; 7 8 void init() 9 {10 int i, j, tx, ty;11 for(i = 1; i <= n; i++){12 for(j = 1; j... 阅读全文
posted @ 2012-04-20 11:17 背着超人飞 阅读(162) 评论(0) 推荐(0)
摘要:这一题是比较水的最小生成树的题,作为模板题比较好,下面给出了prim算法跟kruskal算法的源代码。AC code:kruskal 1 //kruskal 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 const int MAX = 30; 6 int father[MAX]; 7 int n, sum; 8 int roadNumber; 9 struct ROAD{10 int s, e, v;11 }road[MAX * MAX];12 13 14 void init( 阅读全文
posted @ 2012-04-19 19:54 背着超人飞 阅读(153) 评论(0) 推荐(0)
摘要:这一题跟POJ的heavy transportation 一题正好相反,是求最短路中的边权最长边。用的dijsktra算法,用邻接表存储各边权。AC code: 1 #include <iostream> 2 #include <cmath> 3 #include <string.h> 4 #define MAX 1000 5 #define MAXN 100000 6 using namespace std; 7 8 int tmap[MAX][2]; 9 float map[MAX][MAX];10 float dis[MAX];11 bool vis[ 阅读全文
posted @ 2012-02-27 21:10 背着超人飞 阅读(176) 评论(0) 推荐(0)
摘要:这一题算是最短路的变型,要求的是从起点到终点的所有路中最小的一段最大,即求一条最长路,输出这条路中的最小值。我是用Dijstra算法做的。AC code: 1 #include <iostream> 2 #define MAX 2000 3 using namespace std; 4 int map[MAX][MAX]; 5 bool vis[MAX]; 6 int dis[MAX];//存放从起点到第i点的最长路中的最短边长度 7 int num;//记录方案数 8 int n, m; 9 10 void Dij()11 {12 int max;13 int v = 0;1.. 阅读全文
posted @ 2012-02-25 23:26 背着超人飞 阅读(148) 评论(0) 推荐(0)
摘要:题目大意是找到一条生成树,使得该树中最大的一条边在所有树中的最大边最小。算是最小生成树的一道变型。由于边数可能比较多,所以用prim算法比较合适。AC code: 1 #include <iostream> 2 #include <string.h> 3 #define MAX 1000 4 using namespace std; 5 6 int n, map[MAX][MAX]; 7 bool vis[MAX]; 8 int dis[MAX]; 9 int ans;10 11 void ini()12 {13 int i, j;14 for(i = 0; i < 阅读全文
posted @ 2012-02-24 16:50 背着超人飞 阅读(132) 评论(0) 推荐(0)
摘要:这一题是比较裸的最小生成树的题,用邻接表记录数据。我是用kruscal算法做的,思路比较简单,中间用并查集判断是否产生回路。AC code: 1 #include <iostream> 2 #include <stdlib.h> 3 #include <algorithm> 4 #define MAX 200 5 #define MAXN 10000 6 using namespace std; 7 8 struct line{ 9 int start, end, len;10 };11 12 struct line lines[MAXN];13 int m 阅读全文
posted @ 2012-02-24 14:22 背着超人飞 阅读(115) 评论(0) 推荐(0)
摘要:这一题算是比较裸的最小生成树的题,用kruscal很好做,再加上并查集优化就没问题了。AC code: 1 #include <iostream> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <algorithm> 5 using namespace std; 6 struct Line{ 7 int start; int end; int lenth; 8 }line[1000]; 9 int n, linenumber, minlenth;10 int father[1000] 阅读全文
posted @ 2012-02-24 14:11 背着超人飞 阅读(140) 评论(0) 推荐(0)