http://noip.ybtoj.com.cn/contest/12/problem/2
根据定义,我们可得,对任意两棵树,如果它们不会相互遮挡:
#include<bits/stdc++.h> using namespace std; const int N=1e5+5,inf=0x3f3f3f3f; int n,ans; struct node{ int p,a; bool operator <(const node &G)const { return p<G.p; } }tr[N]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&tr[i].p,&tr[i].a); sort(tr+1,tr+n+1); tr[0].p=inf;tr[n+1].p=inf; for(int i=1;i<=n;i++) { int mind=min(abs(tr[i].p-tr[i-1].p),abs(tr[i].p-tr[i+1].p)); ans+=max(0,tr[i].a-mind); tr[i].a=mind; } printf("%d",ans); return 0; }