比赛 |
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();
}