poj 1716(最长路+差分约束系统)
来源:互联网 发布:linux 平台 编辑:程序博客网 时间:2024/06/10 01:58
题意:给出n个区间,现在要你找出一个点集,使得这n个区间都至少有2个元素在这个点集里面,问这个点集最少有几个点。
思路:spfa+差分约束,当然贪心也可以做,应该更快。与1201题相似,关键在于用dict[i]表示区间[0, i]上在这个点集的元素个数,具体解法详见poj 1201 :Intervals。
分析:求最小,所以差分约束的等式 在大于左边
dis[i] 保存从最小值到 i 需要的点数
有状态如下:对于一个区间a,b dis[b+1] - dis[a] >= 2; 0<=dis[i]-dis[i-1]<=1
连边 ,求最长路,即所求的最小值
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <queue>using namespace std;#define maxn 233333int m;int mm;int mi;struct node{ int des; int nxt; int val;};node data[maxn] ;int head[maxn];int inq[maxn];int dis[maxn];int cnt;void addege(int u,int v,int w){ data[cnt].des = v; data[cnt].val = w; data[cnt].nxt = head[u]; head[u] = cnt++;}int spfa(){ for(int i = 0 ; i <= mm ; ++i)dis[i] = -1e9; memset(inq,0,sizeof(inq)); queue<int>Q; Q.push( mi ); dis[mi] = 0; inq[mi] = 1; while(!Q.empty()) { int u = Q.front(); Q.pop(); inq[u] = 0; for(int i = head[u] ; ~i ; i = data[i].nxt) { int v = data[i].des; int w = data[i].val; if( dis[v] < dis[u] + w ) { dis[v] = dis[u] + w; if( !inq[v] ) { inq[v] = 1; Q.push(v); } } } } return dis[mm];}int main(){ while( ~scanf("%d",&m) ){ mm = 0;mi = 1e9;cnt=0; memset(head,-1,sizeof(head)); for(int i = 1 ; i <= m ; ++i) { int a,b; scanf("%d %d",&a,&b); addege(a,b+1,2); mm = max(mm,b+1); mi = min(mi,a); } for(int i = mi ; i <= mm ; ++i) { addege(i,i+1,0); addege(i+1,i,-1); } printf("%d\n",spfa()); }}
0 0
- poj 1716(最长路+差分约束系统)
- POJ 1201 差分约束、最长路
- poj 1201(差分约束+最长路)
- 差分约束系统 poj
- poj 1201 Intervals(差分约束求最长路)
- poj 1201 Intervals(差分约束,最长路)
- POJ 1932 XYZZY (差分约束+最长路)
- 【POJ1201】Intervals-差分约束系统+单源最长路
- POJ 1716 差分约束
- poj 1716 Integer Intervals(差分约束系统)
- POJ 1716 Integer Intervals 差分约束系统
- POJ - 1716 Integer Intervals(差分约束系统)
- 【POJ 1716】Integer Intervals(差分约束系统)
- poj 1716 Integer Intervals(差分约束系统)
- poj 1716 Integer Intervals 差分约束系统
- POJ 1716Integer Intervals 差分约束系统
- (模板题)poj 1716 Integer Intervals(差分约束系统)
- POJ 3169 Layout(差分约束系统)
- maven+springmvc+POI导入Excel
- java基本语法
- Linux下怎么安装lxml库
- 采用CSV Reader, 基于Java Bean和反射的CSV文件读取器
- HDU 5119 Happy Matt Friends【背包+位运算】
- poj 1716(最长路+差分约束系统)
- c++ primer 练习 2.21、2.23、2.24、2.25
- 平衡树学习笔记——旋转式treap
- 关于jQuery使用serializeArray()序列化表单数据,使用FormData()实现AJAX请求的问题
- 轻框架Jfinal基本编译熟悉
- Spring基础 导入AOP+自定义标签切面
- VB 共享软件防破解设计技术初探(一)
- Linux查看CPU信息
- maven项目:java.lang.ClassNotFoundException