POJ 1716 Integer Intervals(差分约束)
来源:互联网 发布:知乎,京九高铁 编辑:程序博客网 时间:2024/06/06 00:02
题意:
给n个[a,b]区间,然后求一个最小的集合里面包含每个区间至少2个不同的元素,求这个最小集合的个数。
题解:
在a,b区间最小要有两个数值符合要求。所以是b+1-a>=2 ,因为题目的隐藏条件,0<=B+1-A<=1,保证了图的连通,所以不需要用超级源点
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<queue>using namespace std;#define INF 0x3f3f3f3fconst int MAXN=1e4+7;const int MAXM=1e4*3+7;struct node{ int to,next,w;//其中edge[i].to表示第i条边的终点,edge[i].next表示与第i条边同起点的下一条边的存储位置,edge[i].w为边权值.}Edge[MAXM];//Edge保持m条边的个数 int head[MAXM];int dis[MAXN];int num[MAXN];bool vis[MAXN];int n,m,tot;//head和dis保持n个点 void add_edge(int a,int b,int c){ Edge[++tot].to=b; Edge[tot].w=c; Edge[tot].next=head[a]; head[a]=tot;} int SPFA(int s){ queue<int>q; int k,to,w; memset(num,0,sizeof(num)); memset(vis,false,sizeof(vis)); for(int i=0;i<=10000;i++) dis[i]=-INF; dis[s]=0; q.push(s); vis[s]=true;//加入队列并标记 while(!q.empty()) { k=q.front(); q.pop(); vis[k]=0;//弹出队列并取消标记 for(int i=head[k];i!=-1;i=Edge[i].next) { to=Edge[i].to; w=Edge[i].w; if(dis[k]+w>dis[to]) { dis[to]=dis[k]+w; if(!vis[to])//判断这个点是否在队列里面,如果不在加入队列 { vis[to]=true; q.push(to); num[to]++;// if(num[to]>n)//判断是否成环 // return -1; //这里会出现超过n次的情况,我返回负环的情况加上去就错了。 } } } } return dis[m];}int main(){ while(~scanf("%d",&n)) { memset(head,-1,sizeof(head)); tot=0,m=0; for(int i=0;i<=10000;i++) { add_edge(i+1,i,-1); add_edge(i,i+1,0); } for(int i=1;i<=n;i++) { int u,v; scanf("%d%d",&u,&v); m=max(m,v+1); // add_edge(v+1,u,-(v-u+1));//在a,b区间最多要有b-a+1个数值符合要求。会变成b+1-a<=b-a+1; // 但是这道题是求一个区间里最少有两个不同的数满足最小集合中的数,所以上面那种最多的情况是不能要的,而是要下面的最小两个数的情况 add_edge(u,v+1,2);//在a,b区间最小要有两个数值符合要求。所以是b+1-a>=2 } int ans=SPFA(0); printf("%d\n",ans); } return 0;}
阅读全文
0 0
- 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 - 1716 Integer Intervals(差分约束系统)
- 【POJ 1716】Integer Intervals(差分约束系统)
- POJ 1716 Integer Intervals(差分约束)
- POJ 1716 Integer Intervals(差分约束)
- poj 1716 Integer Intervals (差分约束)
- POJ 1716 Integer Intervals(差分约束)
- POJ 1201 Intervals || POJ 1716 Integer Intervals 差分约束
- poj 1716 Integer Intervals(差分约束系统)
- POJ 1716 Integer Intervals SPFA 差分约束
- poj 1716 Integer intervals (差分约束#3 /贪心)
- POJ 1716 Integer Intervals 差分约束系统
- poj 1716 Integer Intervals(差分约束||贪心)(中等)
- 直接插入排序
- sublime text3安装和支持中文fcitx输入
- 键盘获取3个整型数据
- 余弦的两种表示方法:边长和向量
- Cause: java.lang.ClassCastException: com.github.pagehelper.PageHelper cannot be cast to org.apache.i
- POJ 1716 Integer Intervals(差分约束)
- 关于判断输入字符的单词个数的非数组做法
- 如何查看USB设备的VID\PID
- EasyAR+Unity开发(二)HelloAR 项目剖析以及具体使用
- 单双回文(简单来说就是把一个回文字符串劈成两个)
- 云计算笔记二:Hadoop概述
- javascript对象
- C#路径选择及Excel读写操作
- Python-matplotlib入门--基础图表的绘制