poj 1456

贪心+并查集。

代码:

#include<iostream>
#include<fstream>

using namespace std;

int n;
struct e{
	int s,t;
};

int cmp(const void *a,const void *b){
	return (*(e *)b).s-(*(e *)a).s;
}



e p[10001];

int f[10001];

void init(){
	int i;
	for(i=0;i<=10000;i++)
	{
		f[i]=i;
		
	}
}

int father(int s){
	if(s!=f[s])
		f[s]=father(f[s]);
	return f[s];
}

void unionset(int s,int t){
	int i,j;
	i=father(s);j=father(t);
	f[i]=j;
}


void read(){
//	ifstream cin("in.txt");
	int i,j,k,s,t,ans;
	while(cin>>n)
	{
		ans=0;
		for(i=0;i<n;i++)
		{
			cin>>j>>k;
			e b;
			b.s=j;b.t=k;
			p[i]=b;
		}
		qsort(p,n,sizeof(e),cmp);
		init();
		for(i=0;i<n;i++)
		{
			s=father(p[i].t);
			if(s!=0)
			{
				ans+=p[i].s;
				unionset(s,s-1);
			}
		}
		cout<<ans<<endl;
	}
}

int main(){
	read();
	return 0;
}

posted on 2011-04-23 16:11  宇宙吾心  阅读(272)  评论(0)    收藏  举报

导航