http://acm.hust.edu.cn/vjudge/contest/view.action?cid=34236#problem/F
题意:有n种商品,每个商品有一个价格,和最后售出时间,问价格最大是什么;
解析:运用贪心的思想,使用并查集来优化;
其余没什么说的,主要就是并查集将时间划分到同一区域中
注意:n=0不要跳出
// f.cpp : 定义控制台应用程序的入口点。
//
//#include "stdafx.h"
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 10005;
int fa[ maxn ], n, m, ans;
struct node{
int pro, da;
bool operator<(const node &x )const{
return pro > x.pro;
}
}edge[ maxn ];
void Start(){
for( int i = 0; i < maxn; ++ i ){
fa[ i ] = i;
}
}
int find( int x ){
if( x == fa[ x ] )
return x;
int temp = find( fa[ x ] );
return fa[ x ] = temp;
}
void Union( int a, int b ){
int x = find( a );
int y = find( b );
fa[ y ] = x;
}
//int _tmain(int argc, _TCHAR* argv[])
int main()
{
while( cin >> n ){
//if( !n )
// break;
Start();
for( int i = 0; i < n; ++i ){
cin >> edge[ i ].pro >> edge[ i ].da;
}
sort( edge, edge + n );
ans = 0;
for( int i = 0; i < n; ++i ){
int temp = find( edge[ i ].da );
if( temp ){
Union( temp - 1, temp );
ans += edge[ i ].pro;
}
}
cout << ans << endl;
}
return 0;
}