最小生成树
Keep_Trying_Go
无
展开
-
poj2728(最优比率生成树)
1.最优比率生成树(最优比例生成树):定义:有向带权图G, 对于图中每条边e[i], 都有cost[i]权值)和dist[i](距离), 要求的是一棵生成树T, 它使得 ∑(cost[i]) / ∑(dist[i]), i∈T 最大(或最小).: 0-1分数规划设x[i]等于1或0, 表示边e[i]是否属于生成树.则我们所求的比率 rate = ∑(cost[i] * x[i]) / ∑(cost[i] * x[i]), 0≤i<m .z( rate ) = ∑(cost[i] * x[i]原创 2021-05-09 20:10:49 · 377 阅读 · 0 评论 -
Prim算法
例如;如下图,构造一棵最小生成树构造过程:#include<iostream>#include<algorithm>#include<cstring>#include<iomanip>#include<cmath>using namespace std;const int maxx=505;const int inf=0x3f3f3f3f;int e[maxx][maxx];//记录两点之间的权值 int n,.原创 2021-05-02 20:50:03 · 124 阅读 · 0 评论 -
Kruskal算法模版
1.例如:求解如图的最小生成树求解过程:方法一:一般做法(最终都是在避环)#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;const int maxx=105;const int inf=0x3f3f3f3f;int pre[maxx];int rank[maxx];struct node{.原创 2021-05-02 18:04:17 · 222 阅读 · 2 评论 -
HDU2682(最小生成树)
题意:给定n个城市的幸福值,城市的编号从1或者其他编号开始都可以,(只要后面在表示和计算的时候正确就可以了);当幸福值中一个或者两个或者两个之和为数素的时候就可以(min(a[i],min(a[j],abs(a[i]-a[j])))计算出最小的加以记录在e[i][j]中,之后的就是求最小生成树了的基本算法了。方法一:Prim()算法#include<iostream>#include<cstring>#include<cmath>#include<algo原创 2021-04-08 21:54:02 · 190 阅读 · 0 评论 -
HDU3371(最小生成树)
题意:给出n个点,代表城市的个数,m代表给出的道路条数,k代表给出k组道路已经连通的,k行中的每一行首先给出城市个数t,后面跟上城市个数t,代表这t个城市任意两个城市之间已经是连通的,所以现在给出最小的修路费用。方法一:Prim算法#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>using namespace st原创 2021-04-08 19:17:52 · 150 阅读 · 0 评论 -
HDU1301(最小生成树)
题意:将所有的村庄链接在一起,并且要求总的公路系统成本最低,所以很容易想到构造最小生成树:输入的意思是:给出n代表村庄的数量,然后下面给出n-1行;每一行在行首给出一个村庄的和一个数字,这个数字代表的是和行首给出的村庄相连的村庄的村庄,简单一点就是和行首相连的村庄,然后给出村庄的同时也给出之间的公路费用。方法一:Prim()算法#include<iostream>#include<algorithm>#include<cstring>#include<c原创 2021-04-08 17:54:16 · 210 阅读 · 0 评论 -
HDU2988(Kruskal算法模版)
其实以下两种方法的实质本来就是一样的,就是在写的形式不一样而已!只要理解就可以了!方法一:#include<iostream>#include<algorithm>#include<cmath>#include<cstdio>using namespace std;const int maxn=2e5+500;int pre[maxn];int ranks[maxn];int dist[maxn];int n,m;int mincost原创 2021-04-03 22:27:28 · 152 阅读 · 0 评论 -
HDU1162(Prim算法)
#include<iostream>#include<algorithm>#include<cstring>#include<iomanip>#include<cmath>using namespace std;const int maxx=505;const double inf=0x3f3f3f3f;double e[maxx][maxx];int n;int vis[maxx];double dist[maxx];in原创 2021-03-18 07:09:37 · 143 阅读 · 0 评论 -
HDU1102(Prim算法)
这道题附加了一个条件是:最后给出q行,代表这两个村庄是通路的,所以可以将其权值赋值为零。#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxx=505;const int inf=0x3f3f3f3f;int e[maxx][maxx];int n;int vis[maxx];int dist[maxx];int p[maxx];原创 2021-03-18 07:09:57 · 191 阅读 · 0 评论 -
HDU1875
#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<queue>#include<iomanip>#define inf 0x3f3f3f3fusing namespace std;int vis[105][105];double e[105][105];//记录起点位置到终点位置之间的费用 int vis1[10原创 2021-03-09 00:00:40 · 124 阅读 · 0 评论 -
HDU1879(Prim算法)
#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int maxx=1005;const int inf=0x3f3f3f3f;int e[maxx][maxx];int dist[maxx];int p[maxx];int vis[maxx];int n;int Prim(int u){ for原创 2021-03-18 07:10:08 · 151 阅读 · 0 评论 -
HDU1863(Prim算法)
#include<iostream>#include<algorithm>#include<cstring>#include<vector>using namespace std;const int inf=0x3f3f3f3f;const int maxx=1005;int e[maxx][maxx];int p[maxx];int dist[maxx];int vis[maxx];int n,m;int Prim(){ for(i原创 2021-03-18 07:09:28 · 146 阅读 · 0 评论 -
HDU1233
采用并查集求解Kruskal算法:#include<iostream>#include<algorithm>#include<cstring>using namespace std;int e[105][105];int n,m;int pre[105];struct node{ int x,y; int cost;}num[10005];int cmp(node a,node b){ return a.cost<b.cost;}void原创 2021-03-09 00:01:09 · 81 阅读 · 0 评论 -
poj1789
题意:一个字符串之间的不同字母数转换为字母之间的距离,即可求解出最小Q。思路:求解出最高质量为1/Q,即Q最下的时候才是最高质量,即采用最小生成树Prim算法。#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const in原创 2021-02-27 13:20:01 · 71 阅读 · 0 评论 -
poj2485
题意:要求村庄都连接在一起,并且这个值是最小的。思路:最小生成树Prim算法。#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxx=505;const int inf=0x3f3f3f3f;int e[maxx][maxx];int n;int vis[maxx];int dist[maxx];int p[maxx];int原创 2021-02-27 13:13:59 · 130 阅读 · 0 评论 -
poj1258
题意:连接整个农场所需的最小光纤长度之和。思路:采用最小生成树Prim算法。#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxx=505;const int inf=100000;int e[maxx][maxx];int n;int vis[maxx];int dist[maxx];int p[maxx];int minc原创 2021-02-27 13:11:27 · 73 阅读 · 0 评论 -
poj3026
Prim求解最小生成树。#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<queue>using namespace std;const int maxx=205;const int inf=0x3f3f3f3f;int n,m;int e[maxx][maxx];int cost[maxx][maxx];int d[m原创 2021-02-27 13:09:06 · 160 阅读 · 0 评论