hdu 1384 Intervals 差分约束
2012-04-21 15:07
363 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1384
题意:给定n个区间,每个区间给定一个常数ci,求一个具有最少元素的整数集,要求每个区间中都有至少ci个整数和集合中的元素相同。
思路:经典的差分约束。我们用count[i]表示,从0到i的区间内共有多少个元素被选在集合内,则对于每个给出的区间条件:[ i, j ] ci有:count[j] - count[i-1] >= ci。除此之外,还有题目中隐含的条件,0 <= count[i] - count[i-1] <= 1,这样就可以建一个有向图,然后用spfa求最长路就可以了。
代码:
题意:给定n个区间,每个区间给定一个常数ci,求一个具有最少元素的整数集,要求每个区间中都有至少ci个整数和集合中的元素相同。
思路:经典的差分约束。我们用count[i]表示,从0到i的区间内共有多少个元素被选在集合内,则对于每个给出的区间条件:[ i, j ] ci有:count[j] - count[i-1] >= ci。除此之外,还有题目中隐含的条件,0 <= count[i] - count[i-1] <= 1,这样就可以建一个有向图,然后用spfa求最长路就可以了。
代码:
/* 差分约束 */ #include<stdio.h> #include<string.h> #include<queue> int N, max_n ,min_n; const int MAXN = 50010 ; struct node{ int nx ,num , dis ; }edge[MAXN*4]; int root[MAXN] , cnt ; void add(int a,int b, int c){ edge[cnt].num = b ; edge[cnt].nx = root[a] ; edge[cnt].dis = c ; root[a] = cnt++ ; } int dis[MAXN] ; bool vis[MAXN] ; bool relax(int u ,int v,int d){ if( dis[v] < dis[u] + d){ dis[v] = dis[u] + d; return 1; } return 0 ; } void spfa(){ for(int i=min_n ;i<=max_n;i++){ vis[i] = 0 ; dis[i] = -MAXN ; } std::queue<int> que ; while(!que.empty()) que.pop() ; que.push(min_n); vis[min_n] = 1; dis[min_n] = 0 ; while(!que.empty()){ int u = que.front() ; que.pop() ; vis[u] = 0 ; for(int i=root[u] ;i!=-1; i=edge[i].nx){ int v = edge[i].num ; int d = edge[i].dis ; if( 1==relax(u,v,d) && !vis[v]){ vis[v] = 1; que.push(v) ; } } } printf("%d\n",dis[max_n]); } int main(){ int a, b,c ; while(scanf("%d",&N) == 1){ memset(root , -1 ,sizeof(root)); cnt = 0 ; max_n = 0 ; min_n = MAXN ; for(int i=1;i<=N;i++){ scanf("%d %d %d",&a,&b,&c); a ++ ; b ++ ; if(max_n < b) max_n = b ; if(min_n > a - 1) min_n = a - 1 ; add(a-1, b, c); } for(int i=min_n;i<=max_n;i++){ add(i-1,i,0) ; add(i,i-1,-1) ; } spfa() ; } return 0 ; }
相关文章推荐
- Hdu1384-Intervals(差分约束)
- hdu 1384 Intervals (差分约束)
- hdu 1384 Intervals 差分约束 解题报告
- hdu 1384 Intervals (差分约束)
- hdu 1384 Intervals (差分约束)
- HDU 1384 Intervals 差分约束
- hdu 1384 Intervals (差分约束)
- HDU 1384 Intervals (差分约束)
- HDU 1384 && POJ 1201--Intervals 【基础差分约束】
- HDU 1384 Intervals【差分约束-SPFA】
- HDU 1384 Intervals 差分约束
- HDU 1384 Intervals(差分约束)
- 【差分约束】 HDOJ 1384 Intervals
- HDU 1384 (差分约束)
- HDOJ 题目1384 Intervals(差分约束)
- HDU - 1384 差分约束
- (差分约束) hdu 1384
- hdoj 1384 Intervals 【差分约束基础题目】
- hdoj--1384--Intervals(差分约束)
- hdoj--1384--Intervals(差分约束)