poj 1456 Supermarket (最短路程)

点击打开链接
#include"stdio.h"
#include"stdlib.h"
struct node
{
	int p,t;
}aa[10005];
int f[10005],n;
int cmp(const void*a,const void*b)
{
	return (*(struct node*)b).p-(*(struct node*)a).p;
}
void init()
{
	int i;
	for(i=0;i<10005;i++)
		f[i]=i;
}
int find(int i)
{
	if(f[i]!=i)
		f[i]=find(f[i]);
	return f[i];
}
void Union(int m,int n)
{
	int i,j;
	i=find(m);j=find(n);
	f[i]=j;
}
int main()
{
	int i,sum,t;
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0;i<n;i++)
			scanf("%d%d",&aa[i].p,&aa[i].t);
		qsort(aa,n,sizeof(aa[0]),cmp);
		init();
		sum=0;
		for(i=0;i<n;i++)
		{
			t=find(aa[i].t);
			if(t!=0)
			{
				sum+=aa[i].p;
				Union(t,t-1);
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/yyf573462811/p/6365309.html