hdu1102 kruscal最小生成树
来源:互联网 发布:基础设施投资数据 编辑:程序博客网 时间:2024/06/05 23:56
Constructing Roads
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1914 Accepted Submission(s): 628
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 <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxx=50010;
const int maxn=105;
int ans;
int pa[maxx],rank1[maxx];
struct edge{
int u,v,cost;
}e[maxx];
bool cmp(const edge& e1,const edge& e2){
return e1.cost<e2.cost;
}
int findset(int x){
if(x!=pa[x])
pa[x]=findset(pa[x]);
return pa[x];
}
void unionset(int x,int y,int w){
x=findset(x);
y=findset(y);
if(x==y)
return ;
ans+=w;
if(rank1[x]>rank1[y]){
pa[y]=x;
}
else{
pa[x]=y;
if(rank1[x]==rank1[y])
rank1[y]++;
}
}
int main(){
int n,t,x,y;
int k;
int dis[maxn][maxn];
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&dis[i][j]);
}
}
scanf("%d",&t);
for(int i=0;i<t;i++){
scanf("%d%d",&x,&y);
dis[x][y]=0;
}
k=0;
ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
e[k].cost=dis[i][j];
e[k].u=i;
e[k].v=j;
k++;
}
}
sort(e,e+k,cmp);
for(int i=1;i<=n;i++){
pa[i]=i;
rank1[i]=0;
}
for(int i=0;i<k;i++){
x=findset(e[i].u);
y=findset(e[i].v);
if(x!=y)
unionset(x,y,e[i].cost);
}
printf("%d\n",ans);
}
}
- hdu1102 kruscal最小生成树
- hdu1102最小生成树
- hdu1102 最小生成树
- hdu1102 最小生成树
- hdu1102 最小生成树
- 最小生成树 Kruscal
- 最小生成树~kruscal
- 最小生成树-kruscal
- HDU1102 prim 最小生成树
- kruscal最小生成树算法
- kruscal求最小生成树
- 最小生成树-Kruscal算法
- 最小生成树 prim kruscal
- 最小生成树之KRUSCAL
- 最小生成树之KRUSCAL
- poj1258(最小生成树Kruscal)
- hdu1102 Constructing Roads 最小生成树+prim
- hdu1102 Constructing Roads 最小生成树Prim
- MYSQL的初次使用
- linux进程的学习
- linux进程学习,使用wait函数
- 网站分析(一)
- Fedora 下mysql的安装
- hdu1102 kruscal最小生成树
- 英文缩写杂记
- 数据结构-绪论
- android 自定义view 基础(一)
- emacs脚本实现verilog代码的缩进
- OSI,TCP/IP,五层协议的体系结构,以及各层协议
- 初识Java
- 安装交叉编译器arm-linux-gcc的安装
- 日志管理