标签:
Description
Input
并查集优化:首先了解p值越大,更应该卖出,所以我们可以考虑在最后时期 d值 时卖出,该时期如若已被其他物品占有,就往前搜索,找到空余的时间卖出。然后用并查集优化搜索过程,如若确定该时间被卖物品,构造树pre[x] = x - 1;这样通过find()就阔以快速地寻找到空余时间了。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int pre[10005]; struct node{ int p,d; bool operator<(const node &x)const{ return p > x.p; } }a[10005]; void init(){ for(int i = 1; i <= 10000; i++) pre[i] = i; } int find(int x){ return pre[x] == x ? pre[x] : pre[x] = find(pre[x]); } int main(){ int n; while(~scanf("%d",&n)){ int ans = 0; init(); for(int i = 0; i < n; i++){ scanf("%d%d",&a[i].p,&a[i].d); } sort(a,a+n); for(int i = 0; i < n; i++){ int fi = find(a[i].d); if(fi > 0){ ans += a[i].p; pre[fi] = fi-1; } } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/ACMessi/p/4838857.html