poj 1258 kruscal

//hnldyhy(303882171) 8:54:04

#include <iostream> // poj 1258
#include <algorithm>
using namespace std;
#define N 105
int p[N];
void init (int n)
{ for (int i=1;i<=n;i++) p[i]=i; }
int find(int x)
{
if (p[x]==x)return x;
else return p[x]=find(p[x]);
}
void merge(int x,int y)
{
int a=find(x),b=find(y);
if (a!=b) p[a]=b;
}
int a[N][N],t,ans,n;
struct edge
{ int x1,x2,d; } e[N*(N-1)/2]; // N个顶点 N(N-1)/2 边的条数
int cmp(const void *a,const void *b)
{
struct edge *aa=(struct edge *)a,
*bb=(struct edge *)b ;
return (*aa).d-(*bb).d;
}
void kruscal()
{ int u,v,i,c=0;
init (n); ans=0;
for (i=0;i<t;i++)
{ u=e[i].x1; v=e[i].x2;
if (find(u)!=find(v)) //不在同一个集合
{ ans=ans+e[i].d; merge(u,v); c++;}
if (c==n-1) return ;
}
}
int main()
{ int i,j;
while (cin>>n&&n>=3)
{ for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
cin>>a[i][j]; t=0;
for (i=2;i<=n;i++)
for (j=1;j<i;j++)
{ e[t].x1=i; e[t].x2=j;
e[t].d=a[i][j]; t++; }
qsort(e,t,sizeof(e[0]),cmp);
kruscal();
cout<<ans<<endl;
}
return 0;
}

poj 1258 kruscal,布布扣,bubuko.com

时间: 2024-10-26 15:28:18

poj 1258 kruscal的相关文章

各种最小生成树。 HDU 1863 HDU 1301 POJ 1258

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18811    Accepted Submission(s): 7981 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

poj 1258 Agri-Net 解题报告

题目链接:http://poj.org/problem?id=1258 题目意思:给出 n 个 farm,每个farm 之间通过一定数量的fiber 相连,问使得所有farm 直接或间接连通的 最少 fiber 数是多少. 赤裸裸的最小生成树,用prim做的. 有个地方写错,wa 了 几次. 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 const int farm_num = 10000

rwkj 1505 poj 1258 10.1.5.253 1505

#include <iostream>// poj 1258 10.1.5.253 1505using namespace std; #define N 105 // 顶点的最大个数 (多写 int a[N][N],low[N],n,ans;int min(int x,int y){ return x<y?x:y; } void prim(int u0) { int i,j,m,k; ans=0; // for (i=1;i<n;i++) low[i]=a[u0][i]; // l

poj 1258

题意:给n*n矩阵 表示个点个边  求最小生成树 思路:Kruskal 算法 //:简单介绍一下题意.农民要建立互联网络,目的使村庄里所有的农民连上网, //并且总费用最小.多组数据,每组数据给出一个n,然后给出n * n大小的无向图的邻接矩阵表示,值表示边权. //要求输出最小生成树的权值和. #include<iostream> #include<cstring> using namespace std; int map[101][101]; int dist[101]; in

[2016-04-14][POJ][1258][Agri-Net]

时间:2016-04-14 20:36:55 星期四 题目编号:[2016-04-14][POJ][1258][Agri-Net] 题目大意:求最小生成树 分析:直接prim算法 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 100 + 10 ; int g[maxn][maxn],vis[maxn],lowc[maxn]; int

poj 1258 Agri-Net(最小生成树果题)

题目链接:http://poj.org/problem?id=1258 Description Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He needs your help, of course. Farmer John ordered a high speed

POJ 1258 Agri-Net (最小生成树+Prim)

Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39820   Accepted: 16192 Description Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He nee

【POJ 1258】 Agri-Net

[POJ 1258] Agri-Net 最小生成树模板 Prim #include #define INF 0x3f3f3f3f using namespace std; int mp[501][501]; int dis[501]; bool vis[501]; int n; int Prim() { int i,j,w,p,sum = 0; memset(dis,-1,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[1] = 0; for(i = 0

poj 1258 Agri-Net (最小生成树 prim)

Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39499   Accepted: 16017 Description Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He nee