hdu3078
题解:
/*kruskal*/
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct Node
{
int n,m,d;
}node[15001];
int pre[1001];
int a[15001];
bool cmp(Node x,Node y)
{
return x.d<y.d;
}
int found(int x)
{
int r=x;
while(r!=pre[r])
{
r=pre[r];
}
int i=x,j;
while(pre[i]!=r)
{
j=i;
pre[i]=r;
i=j;
}
return r;
}
int main()
{
int p,q;
scanf("%d %d",&p,&q);
for(int i=1;i<=q;i++)
{
scanf("%d %d %d",&node[i].n,&node[i].m,&node[i].d);
}
sort(node+1,node+q+1,cmp);
for(int i=1;i<=p;i++)
pre[i]=i;
int k=0;
int s=0;
for(int i=1;i<=q;i++)
{
int x=found(node[i].n);
int y=found(node[i].m);
if(x!=y)
{
pre[x]=y;
a[k]=i;
k++;
s=max(s,node[i].d);
}
}
printf("%d\n",s);
printf("%d\n",k);
for(int i=0;i<k;i++)
{
printf("%d %d\n",node[a[i]].n,node[a[i]].m);
}
return 0;
}
poj 2395
/*kruskal*/
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct Node
{
int n,m,d;
}node[10001];
int pre[2001];
int a[10001];
bool cmp(Node x,Node y)
{
return x.d<y.d;
}
int found(int x)
{
int r=x;
while(r!=pre[r])
{
r=pre[r];
}
int i=x,j;
while(pre[i]!=r)
{
j=i;
pre[i]=r;
i=j;
}
return r;
}
int main()
{
int p,q;
scanf("%d %d",&p,&q);
for(int i=1;i<=q;i++)
{
scanf("%d %d %d",&node[i].n,&node[i].m,&node[i].d);
}
sort(node+1,node+q+1,cmp);
for(int i=1;i<=p;i++)
pre[i]=i;
int s=0;
for(int i=1;i<=q;i++)
{
int x=found(node[i].n);
int y=found(node[i].m);
if(x!=y)
{
pre[x]=y;
s=max(s,node[i].d);
}
}
printf("%d\n",s);
return 0;
}