Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

全裸的题目!

Posted by chenxuan123456789 at 2012-10-26 17:24:18 on Problem 1287
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

const int size = 5000;
int father[size];
typedef struct node
{
	int s;
	int e;
	int len;
}Node;
Node road[size];

int cmp(const void *_a,const void *_b)
{
	Node *a=(Node*)_a;
	Node *b=(Node*)_b;
	return a->len-b->len;
}

void init_set(int n)
{
	int i;
	for(i=1;i<=n;i++)
		father[i]=i;
}

int dfs_set(int x)
{
	return father[x]==x?x:dfs_set(father[x]);
}

int union_set(int a,int b)
{
	a=dfs_set(a);
	b=dfs_set(b);
	if(a==b)
		return 0;
	else
	{
		if(a>b)
			father[a]=b;
		else
			father[b]=a;
		return 1;
	}
}

int main()
{
	int m,n,i,j,k,sum,count;
	while(scanf("%d",&n)!=EOF&&n)
	{
		scanf("%d",&m);
		for(k=0;k<m;k++)
			scanf("%d %d %d",&road[k].s,&road[k].e,&road[k].len);
		init_set(n);
		qsort(road,m,sizeof(road[1]),cmp);
		sum=0;
		count=0;
		for(i=0;i<m;i++)
		{
			if(union_set(road[i].s,road[i].e))
			{
				sum+=road[i].len;
				count++;
			}
			if(count==n-1)
				break;
		}
		printf("%d\n",sum);
	}
	return 1;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator