hdu1233 prim模板
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=110;
int map[maxn][maxn],cost[maxn],ad[maxn],n,we[maxn];
void prim()
{
memset(ad,0,sizeof(ad));
memset(cost,inf,sizeof(cost));
cost[1]=0;
int sum=0;
for(int i=2;i<=n;i++)
cost[i]=map[1][i];
for(int i=2;i<=n;i++)
{
int min=inf;
int k;
for(int j=2;j<=n;j++)
{
if(cost[j]&&cost[j]<min)
{
min=cost[j];
k=j;
}
}
cost[k]=0;
sum+=min;
for(int j=2;j<=n;j++)
{
if(cost[j]&&map[k][j]<cost[j])
{
cost[j]=map[k][j];
ad[j]=k;
}
}
}
cout << sum << endl;
}
int main()
{
int u,v,w;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
for(int i=0;i<n*(n-1)/2;i++)
{
scanf("%d%d%d",&u,&v,&w);
map[u][v]=map[v][u]=w;
}
prim();
}
}
poj2349 kruskal
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <queue>
#include <cmath>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=1100;
struct node
{
int u,v;
double w;
};
node e[maxn*maxn*2];
double x[maxn],y[maxn];
int n,m,cnt,k,pre[maxn];
double d[maxn];
bool cmp(node a,node b)
{
return a.w<b.w;
}
int find(int a)
{
return a==pre[a]?a:pre[a]=find(pre[a]);
}
int join(int a,int b)
{
int fa=find(a);
int fb=find(b);
if(fa!=fb)
{
pre[fb]=fa;
return 1;
}
return 0;
}
double f(int i,int j)
{
return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
void kruskal()
{
k=0;
sort(e,e+cnt,cmp);
for(int i=0;i<m;i++)
pre[i]=i;
for(int i=0;i<cnt;i++)
{
if(join(e[i].u,e[i].v))
d[k++]=e[i].w;
}
printf("%.2lf\n",d[k-n]);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
cnt=0;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
scanf("%lf%lf",&x[i],&y[i]);
for(int i=0;i<m;i++)
for(int j=i+1;j<m;j++)
{
e[cnt].u=i;
e[cnt].v=j;
e[cnt++].w=f(i,j);
e[cnt].u=j;
e[cnt].v=i;
e[cnt++].w=f(i,j);
}
kruskal();
}
}