Language:
Intervals
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 5 3 7 3 8 10 3 6 8 1 1 3 1 10 11 1 Sample Output 6 题意:给你一些区间,【a,b】从中至少取c个整数点,问最后最少需要取多少点。 思路:又是一个差分约束系统,前一段时间做过一个,但还是不太熟悉。 将区间[ai,bi]的每个端点看做一个顶点,以dist[i+1]表示源点x到i之间至少有与集合Z相同元素的个数。如果将至少含有的相同元素的个数看做边的权值则一个区间[ai,bi]的两个端点的dist[ai]和dist[bi+1]分别表示源点x到ai-1和bi的距离。那么区间[ai,bi+1]又可以看做什么呢?可以看做ai到bi的一条边。依据题意 x、ai、bi构成了一个边权三角形dist[bi+1]-dist[ai]>=ai->bi,即dist[bi+1]-dist[ai]>=ci;所以变形一下就得:dist[bi+1]>=dist[ai]+ci;注意:这个结果只是题目的要求,所以我们if(dist[bi+1]<dist[ai]+ci) dist[bi+1]=dist[ai]+ci;这也决定了求的是最长路径。 |
差分约束系统+poj1201
最新推荐文章于 2018-11-25 23:05:15 发布