当前位置:编程学习 > C/C++ >>

Supermarket

题意:有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;  
}  

 

 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,