POJ 1201 Intervals
这是POJ 1716 升级版。
意思是差不多的,但这三个限制条件是:
1、对于区间,必定有num[start]>=num[end]-这区间内至少有的点的个数;
2、对于整数点,必有num[i]<=num[i+1];
3、对于整数点,必有num[i+1]<=num[i]+1;
下面是代码:
#include <stdio.h> #include <string.h> struct node { int x,y,w; } qu[50006]; int num[50006]; int main() { int n; while(scanf("%d",&n)!=EOF) { int i,s=1<<30,e=0; for(i=0; i<n; i++) { scanf("%d%d%d",&qu[i].x,&qu[i].y,&qu[i].w); qu[i].y++; if(qu[i].x<s) { s=qu[i].x; } if(qu[i].y>e) { e=qu[i].y; } } bool flat=true; while(flat) { flat=false; for(i=0; i<n; i++) { if(num[qu[i].x]>num[qu[i].y]-qu[i].w) { num[qu[i].x]=num[qu[i].y]-qu[i].w; flat=true; } } for(i=s; i<e; i++) { if(num[i+1]>num[i]+1) { num[i+1]=num[i]+1; flat=true; } } for(i=e-1; i>=s; i--) { if(num[i]>num[i+1]) { num[i] = num[i+1]; flat = true; } } } printf("%d\n",num[e]-num[s]); } return 0; }