最小生成树(HDOJ 1863)】的更多相关文章

题目传送门 /* 此题为:HDOJ 1233 + HDOJ 1232 */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; + ; int pre[MAX_N]; int tot; int sum; struct NODE { int x, y; int len; }node[MAX_N]; int find(int…
畅通工程 http://acm.hdu.edu.cn/showproblem.php?pid=1863 1.Prim算法: Prim算法是由一个点(最初的集合)向外延伸,找到与集合相连权值最小的边, 然后把对应顶点拉到集合里,直到所有的顶点全部在集合里为止. Prim算法的演示如下: http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/flashhtml/prim.htm #include <stdio.h> ; ; int map[MAXV]…
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1863 注意有可能出现无法生成树的情况. #include <iostream> #include <cstring> using namespace std; const int inf=0xffffff; int weight[105][105],n,m; int prime() { int sum=0; int pre[105]; int dis[105]; bool visit[1…
#include<cstdio> #include<cstring> #define inf 0xffffff ][]; int ans; void prim(int n) { ],used[],i,j,k,min,closet[]; memset(used,,sizeof(used)); ;i<=n;i++) lowcost[i]=g[i][],closet[i]=; used[]=; ;i<n;i++) { j=; min=inf; ;k<=n;k++) {…
并查集+最小生成树 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19824    Accepted Submission(s): 8449 Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计…
#include<stdio.h> #include<string.h> int father[105],depth[105]; int dist[105],map[101][101]; int vis[105],n; void init_B() { int i; for(i = 1;i <= n;i ++) { father[i] = i; depth[i] = 0; } } int find(int x) { if(x == father[x]) return x; re…
首先,贴上一个很好的讲解贴: http://www.wutianqi.com/?p=3012 HDOJ 1233 还是畅通工程 http://acm.hdu.edu.cn/showproblem.php?pid=1233 裸的Prim... #include<cstdio> #define MAXN 105 #define INF 0x3f3f3f3f int map[MAXN][MAXN]; int dist[MAXN]; int vis[MAXN]; int n,a,b,x,ans,tot…
最小生成树的性质 MST性质:设G = (V,E)是连通带权图,U是V的真子集.如果(u,v)∈E,且u∈U,v∈V-U,且在所有这样的边中, (u,v)的权c[u][v]最小,那么一定存在G的一棵最小生成树,(u,v)为其中一条边. 构造最小生成树,要解决以下两个问题: (1).尽可能选取权值小的边,但不能构成回路(也就是环). (2).选取n-1条恰当的边以连接网的n个顶点. Prim算法的思想: 设G = (V,E)是连通带权图,V = {1,2,…,n}.先任选一点(一般选第一个点),首…
poj 1251  && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E 44E 2 F 60 G 38F 0G 1 H 35H 1 I 353A 2 B 10 C 40B 1 C 200Sample Output 21630 prim算法 # include <iostream> # include <cstdio> # include <cstr…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 17593    Accepted Submission(s): 7417 Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交…
题意: 给出图的边和点数,要求最小生成树的代价,注:有些点之间是不可达的,也就是可能有多个连通图.比如4个点,2条边:1-2,3-4. 思路: 如果不能连通所有的点,就输出‘?’.之前以为每个点只要有边连着就一定能生成树,其实还可以是每个点虽然有边可达,但是给的其实是两个图,比如上例.其他按照常规Prim. #include <bits/stdc++.h> using namespace std; ; const int mod=0x7f7f7f7f; int v[N][N]; //权 int…
题意 中文 入门最小生成树  prim大法好 #include<cstdio> #include<cstring> using namespace std; const int N = 105; int cost[N], mat[N][N], n, m, ans; void prim() { memset(cost, 0x3f, sizeof(cost)); cost[1] = -1; int cur = 1, next = 0; for(int i = 1; i < n;…
看卿学姐视频学到的题目 kruskal算法实现最小生成树 #include<bits/stdc++.h> using namespace std; ; typedef long long ll; int n,m; struct edge{ int from ,to; ll cost; }E[maxn*maxn]; bool cmp(edge a,edge b) { return a.cost < b.cost; } int fa[maxn]; void init() { ; i <…
思路: 比较典型的最小生成树的题目了..在这里用求最小生成树的经典算法K(Kruskal)算法和P(Prim)算法.我的 K 算法用的是结构体来存图,P 算法用的是邻接矩阵来存图,K算法的复杂度是O(ElogE),比较适用于稀疏图,P算法的复杂的是O(V ^ 2),适合用稠密图. 以下是C++的K算法代码 #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #…
d.m个村庄,n条路,计算出所有村庄畅通需要的最低成本. s.最小生成树 c.Prim算法:cost[a][b]和cost[b][a]都得赋值. /* Prim算法 Prim求MST 耗费矩阵cost[][],标号从0开始,0~n-1 返回最小生成树的权值,返回-1表示原图不连通 */ #include<iostream> #include<stdio.h> #include<string.h> using namespace std; const int INF=0x…
Tree Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1954    Accepted Submission(s): 573 Problem Description There are N (2<=N<=600) cities,each has a value of happiness,we consider two cities…
题目 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> #include <malloc.h> #include<stdlib.h> #include<algorithm> #include<iostream> #include<math.h> using namespace std; #define M 110 #define in…
Problem B Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 10   Accepted Submission(s) : 7 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Eddy begins to like painting…
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2915    Accepted Submission(s): 931 Problem Description Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1233 可以用Kruskal来做,不过当图的边比较稠密的时候用prime会更快一些. AC代码:296MS #include <iostream> #include <cstring> #include <cstdio> using namespace std; const int inf=0xffffff; int dis[105],sum,n; int weight[105]…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233 思路分析:该问题为最小生成树问题,使用kruskal算法或者prim算法即可解决: 代码如下: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; + ; int u[MAX_N], v[MAX_N], w[MA…
好久没写博客了写着玩的…… Kruskal这种东西离散都学过…… 一句话…… 添加当前图权值最小且构不成环的一条边 直到连接所有点…… 其他人好多Kruskal的模版 肯定有比我的好的…… 就是刷一波存在感…… #include <stdio.h> #include <algorithm> #define maxn 101 using namespace std; int vis[maxn]; int num,sum; struct edge{ int a; int b; int…
两个模板: kruskal #include<stdio.h> #include<queue> #include<algorithm> #include<iostream> using namespace std; ; int f[maxn]; int find(int x) { if (f[x] == x)return x; else return(f[x] = find(f[x])); } bool same(int x, int y) { return…
畅通project再续 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其它的小岛时都要通过划小船来实现. 如今政府决定大力发展百岛湖.发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通! 经过考察小组RPRush对百岛湖的情况充分了解后.决定在符合条件的小岛间建上桥,所谓符合条件,就是2个小岛之间的距离不能小于10米,也不能大于1000米. 当然,为了节省资金.仅仅要求实现随意2个小岛之间有路通就可以…
Ice_cream's world III Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1237    Accepted Submission(s): 408 Problem Description ice_cream's world becomes stronger and stronger; every road is buil…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 将结点的字符信息处理成点信息即可,代码如下: #include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; typedef unsigned long long ull; #define pf printf #define mem(a,b) memset(a,b,size…
HDOJ 题目分类 //分类不是绝对的 //"*" 表示好题,需要多次回味 //"?"表示结论是正确的,但还停留在模块阶 段,需要理解,证明. //简单题看到就可以敲的 1000:    入门用: 1001:    用高斯求和公式要防溢出 1004:1012: 1013:    对9取余好了 1017:1021: 1027:    用STL中的next_permutation() 1029:1032:1037:1039:1040:1056:1064:1065: 10…
HDOJ 题目分类 /* * 一:简单题 */ 1000:    入门用:1001:    用高斯求和公式要防溢出1004:1012:1013:    对9取余好了1017:1021:1027:    用STL中的next_permutation()1029:1032:1037:1039:1040:1056:1064:1065:1076:    闰年 1084:1085:1089,1090,1091,1092,1093,1094, 1095, 1096:全是A+B1108:1157:1196:1…
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1863 思路:最小生成树模板题,直接套模板. 代码: #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define INF 1<<29 ][]; ],d[]; int main() { int n,…
模板题,学习一下最小生成树的Kruskal算法 对于一个连通网(连通带权图,假定每条边上的权均为大于零的实数)来说,每棵树的权(即树中所有边的权值总和)也可能不同 具有权最小的生成树称为最小生成树 生成树: 无向连通图的边的集合 无回路 连接所有的点 最小: 所有边的权值之和最小 n个顶点的树有n-1条边 时间复杂度:O(ElogE) 对于稀疏图来说 按所给的边的权值从小到大排序,如果该边不与已经选的边形成环就选择它 这里用并查集来实现 第i条边的端点放在u.v数组中,权值保存在w中 这里用的是…