最小生成树
来源:互联网 发布:字符串拼接函数 js 编辑:程序博客网 时间:2024/06/07 20:45
link:点击打开链接
Constructing Roads
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14487 Accepted Submission(s): 5498
We know that there are already some roads between some villages and your job is the build some roads such that all the villages are connect and the length of all the roads built is minimum.
Then there is an integer Q (0 <= Q <= N * (N + 1) / 2). Then come Q lines, each line contains two integers a and b (1 <= a < b <= N), which means the road between village a and village b has been built.
30 990 692990 0 179692 179 011 2
179
#include<iostream>
#include<algorithm>
#define N 110
using namespace std;
struct node{int u,v,w;}edge[N*N];
int parent[N];
bool cmp(node a,node b)
{
if(a.w<=b.w) return true;
return false;
}
int find(int a)
{
if(a!=parent[a])
return find(parent[a]);
else return a;
}
int kruskal(int n,int m)
{
sort(edge,edge+m,cmp);
int i,x,y,ans=0;
for(i=0;i<m;i++)
{
x=edge[i].u;
y=edge[i].v;
x=find(x);
y=find(y);
if(x!=y)
{
ans+=edge[i].w;
parent[y]=x;
}
}
return ans;
}
int main()
{
int n,q,k,i,j,m;
while(cin>>n)
{
m=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cin>>k;
if(i>=j) continue;
edge[m].u=i;
edge[m].v=j;
edge[m].w=k;
m++;
}
}
for(k=1;k<=n;k++) parent[k]=k;
cin>>q;
for(k=1;k<=q;k++)
{
cin>>i>>j;
i=find(i);//WA几次原来是这里的原因,要注意!!
j=find(j);
parent[j]=i;
}
cout<<kruskal(n,m)<<endl;
}
return 0;
}
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 存储过程02-简单通用分页
- 嵌入式 FAAC1.28 在海思HI3518C/HI3518A平台linux中的编译优化
- svn的文本对比功能(线上线下均可以使用)
- Jquery的table的合并行
- 遍历 Json 数组(不知道属性的情况), 以及比较相同结构的两个 Json 数组值不同项
- 最小生成树
- hdoj problem 1422 重温世界杯(动态规划)
- android察看真实分区大小
- Dreamweaver cs6 怎么安装 一步步详细安装教程(破解)
- 基本数据类型算式运算中的类型转换;强制类型转换
- 存储过程01-大数据通用高效分页(不带条件和排序)
- require和include的区别
- Android字体设置
- 加载多个实现类实现了同一个接口方法