poj1861 kruskal
1389 단어 [프로 그래 밍 문제]
#include
#include
#include
using namespace std;
#define maxn 1001
#define maxm 15001
struct edge
{
int u,v,w;
} edges[maxm];
int parent[maxn],ans[maxn];
int i,j,N,M;
int maxedge,num,ai;
void ufset()
{
for(i=0; i=0; s=parent[s]);
while(s!=x)
{
int tmp=parent[x];
parent[x]=s;
x=tmp;
}
return s;
}
void Union(int R1,int R2)
{
int r1=find(R1),r2=find(R2);
int tmp=parent[r1]+parent[r2];
if(parent[r1]>parent[r2])
{
parent[r1]=r2;
parent[r2]=tmp;
}
else
{
parent[r2]=r1;
parent[r1]=tmp;
}
}
int cmp(const void* a,const void* b)
{
edge aa=*(const edge*)a;
edge bb=*(const edge*)b;
return aa.w-bb.w;
}
void kruskal()
{
int u,v;
ufset();
for(i=0; imaxedge)
maxedge=edges[i].w;
num++;
Union(u,v);
}
if(num>N-1)
break;
}
}
int main()
{
//freopen("1.txt","r",stdin);
while(scanf("%d%d",&N,&M)!=EOF)
{
for(i=0; i