比赛 20110311 评测结果 AWWAAWAAAWWWWWWWWTTA
题目名称 岛屿 最终得分 35
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-03-11 20:06:06
显示代码纯文本
#include <fstream>
#include <cstdlib>

#define I_F "isl.in"
#define O_F "isl.out"
#define MAXn 1000000

using namespace std;

struct SS
{
	long x,y;
	long s;
};

SS s[MAXn];
short f[MAXn];
long n;
long long ans;

void Input();
void Swap(SS&,SS&);
void Qsort(long,long);
void Search();
void Output();

int main()
{
	Input();
	Qsort(0,n-1);
	Search();
	Output();
	return 0;
}

void Input()
{
	ifstream fin(I_F);
	fin>>n;
	for (long i=0; i<n; s[i++].x=i)
	{
		fin>>s[i].y>>s[i].s;
		s[i].y--;
	}
	fin.close();
}

void Swap(SS &a, SS &b)
{
	SS t=a;
	a=b;
	b=t;
}

void Qsort(long l, long r)
{
	long x=s[l+rand()%(r-l+1)].s;
	long i=l, j=r;
	do
	{
		while (s[i].s>x) i++;
		while (s[j].s<x) j--;
		if (i<=j)
			Swap(s[i++],s[j--]);
	} while (i<j);
	if (i<r) Qsort(i,r);
	if (l<j) Qsort(l,j);
}

void Search()
{
	for (long i=0; i<n; i++)
		if (f[s[i].x]+f[s[i].y]<2)
		{
			ans+=s[i].s;
			f[s[i].x]++;
			f[s[i].y]++;
		}
}

void Output()
{
	ofstream fout(O_F);
	fout<<ans<<'\n';
	fout.close();
}