POJ 1201 Intervals(差分约束)

来源:互联网 发布:网络会员制营销好处 编辑:程序博客网 时间:2024/05/16 16:16

思路:和POJ1716基本一样,只是这里区间不同元素的个数也给了而已


#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;#define inf -1e9const int maxn = 50005;vector<pair<int,int> >e[maxn];int d[maxn],cnt[maxn],inq[maxn],n;int spfa(int num){    memset(cnt,0,sizeof(cnt));memset(inq,0,sizeof(inq));for(int i = 0;i<=num;i++)d[i]=inf;inq[0]=1;queue<int>q;d[0]=0;q.push(0);while(!q.empty()){int u = q.front();q.pop();inq[u]=0;for(int i  =0;i<e[u].size();i++){int v = e[u][i].first;if(d[v]<d[u]+e[u][i].second){d[v]=d[u]+e[u][i].second;if(!inq[v]){inq[v]=1;q.push(v);if(++cnt[v]>n)return false;}}}}return 1;}int main(){   int num = 0;   while(scanf("%d",&n)!=EOF)   {   for(int i = 0;i<=num;i++)   e[i].clear();   num = 0;       for(int i = 1;i<=n;i++)   {   int u,v,w;   scanf("%d%d%d",&u,&v,&w);   u++,v++;   num = max(num,v);   e[u-1].push_back(make_pair(v,w));   }   for(int i = 1;i<=num;i++)   {   e[0].push_back(make_pair(i,0));   e[i].push_back(make_pair(i+1,0));   e[i+1].push_back(make_pair(i,-1));   }   spfa(num);   printf("%d\n",d[num]);   }}


Description

You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. 
Write a program that: 
reads the number of intervals, their end points and integers c1, ..., cn from the standard input, 
computes the minimal size of a set Z of integers which has at least ci common elements with interval [ai, bi], for each i=1,2,...,n, 
writes the answer to the standard output. 

Input

The first line of the input contains an integer n (1 <= n <= 50000) -- the number of intervals. The following n lines describe the intervals. The (i+1)-th line of the input contains three integers ai, bi and ci separated by single spaces and such that 0 <= ai <= bi <= 50000 and 1 <= ci <= bi - ai+1.

Output

The output contains exactly one integer equal to the minimal size of set Z sharing at least ci elements with interval [ai, bi], for each i=1,2,...,n.

Sample Input

53 7 38 10 36 8 11 3 110 11 1

Sample Output

6


0 0