POJ1201:Intervals【差分约束】
题目大意:给出N个闭区间,每个区间给出一个ci值,让你找出最小的数集Z使得每个闭区间都有不少于ci个Z中的元素,求card(Z)
思路:06年集训队论文《浅析差分约束系统》有详细的解题,设Sn为[0,n]中Z中元素的个数,ai ,bi为区间的两个端点,则可列出以下不等式:
0<=Sn-S(n-1)<=1
S(bi+1)-S(ai)>=ci
然后就可以用差分约束做了,顺便提一下,如果要把0<=Sn-S(n-1)<=1这些边加进图中的话边集会非常的大,以至于一开始邻接表开50000时TLE 130000 RE 140000 WA 一直开到150000才AC
#include<cstdio>
#include<algorithm>
#include<queue>
#include<string.h>
#include<iostream>
#define maxn 150010
using namespace std;
int head[maxn],point[maxn],next[maxn],value[maxn],dist[maxn];
int now=0,minx=19941117,maxx=-19941117;
queue<int> q;
void add(int x,int y,int c)
{
next[++now]=head[x];
head[x]=now;
point[now]=y;
value[now]=c;
}
void spfa(int s)
{
int u;
bool visit[maxn]={0};
for(int i=minx;i<=maxx;i++)dist[i]=-19941117;
q.push(s);
visit[s]=1;
dist[s]=0;
while(!q.empty())
{
u=q.front();
q.pop();
visit[u]=0;
for(int i=head[u];i!=0;i=next[i])
{
int k=point[i];
if (dist[u]+value[i]>dist[k])
{
dist[k]=dist[u]+value[i];
if (visit[k]==0)
{
visit[k]=1;
q.push(k);
}
}
}
}
}
int main()
{
int n,a,b,c;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&a,&b,&c);
if (b+1>maxx)maxx=b+1;
if (a<minx)minx=a;
add(a,b+1,c);
}
for(int i=minx;i<=maxx;i++)
{
add(i,i+1,0);
add(i+1,i,-1);
}
spfa(minx);
printf("%d\n",dist[maxx]);
return 0;
}
POJ1201:Intervals【差分约束】的更多相关文章
- POJ1201 Intervals(差分约束)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 10966 Description You ...
- poj1201 Intervals——差分约束
题目:http://poj.org/problem?id=1201 差分约束裸题: 设 s[i] 表示到 i 选了数的个数前缀和: 根据题意,可以建立以下三个限制关系: s[bi] >= s[a ...
- hdu 1384 Intervals (差分约束)
Intervals Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- poj 1716 Integer Intervals (差分约束 或 贪心)
Integer Intervals Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12192 Accepted: 514 ...
- zoj 1508 Intervals (差分约束)
Intervals Time Limit: 10 Seconds Memory Limit: 32768 KB You are given n closed, integer interva ...
- poj 1201 Intervals(差分约束)
题目:http://poj.org/problem?id=1201 题意:给定n组数据,每组有ai,bi,ci,要求在区间[ai,bi]内至少找ci个数, 并使得找的数字组成的数组Z的长度最小. #i ...
- poj 1201 Intervals——差分约束裸题
题目:http://poj.org/problem?id=1201 差分约束裸套路:前缀和 本题可以不把源点向每个点连一条0的边,可以直接把0点作为源点.这样会快许多! 可能是因为 i-1 向 i 都 ...
- POJ1201基础差分约束
题意: 有一条直线,直线上做多有50000个点,然后给你组关系 a b c表明a-b之间最少有c个点,问直线上最少多少个点. 思路: a-b最少有c个点可以想象a到b+1的距 ...
- poj1201/zoj1508/hdu1384 Intervals(差分约束)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Intervals Time Limit: 10 Seconds Mem ...
- POJ1201 Intervals差分约束系统(最短路)
Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p ...
随机推荐
- T4308 数据结构判断
https://www.luogu.org/record/show?rid=2143639 题目描述 在世界的东边,有三瓶雪碧. ——laekov 黎大爷为了虐 zhx,给 zhx 出了这样一道题.黎 ...
- gym 100947I (求因子)
What a Mess Alex is a very clever boy, after all he is the son of the greatest watchmaker in Odin. O ...
- springcloud 之 bus 消息总线
在分布式系统中,我们通常使用轻量级消息代理(rabbitmq.kafuka)建立一个公共的主题,让所有的微服务都链接进来,并且监听消费这个主题的内容,我们就称这个主题是 消息总线. (可以用作配置文件 ...
- 众皓网络(T 面试)
1.你们项目中哪里用到了Redis? 2.Redis中存储的数据,你们什么时候进行更新? 3.你用过消息队列吗? 4.你写的这个微服务项目拆分成了几个服务? 5.SpringCloud项目怎么部署的?
- 下拉列表事件 Dropdown iview
<Dropdown @on-click="export"> <Button icon='md-log-out'> 000l <Icon type=&q ...
- Ioc 之 Unity的依赖注入
Unity是微软官方提供的一个Ioc容器,用来实现依赖注入,减少代码之间的耦合程度.使用Unity实现Ioc方式有两种,一种是使用代码方式实现,一种是利用配置文件来实现. 我们先来看一下代码方式是如何 ...
- regular expression matching DP
这个题目,我从前天晚上(8月6号晚上)调试到现在(8月8号16:21),太心酸了,不好好总结一下,就太对不起自己了! 这是题目: Implement regular expression matchi ...
- Hibernate初始化环境的基本封装
public class HibernateUtils { private static SessionFactory sf; static{ sf = new Configuration().con ...
- 【简●解】[USACO] 照片Photo
[简●解][USACO] 照片Photo [题目大意] 在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\). ...
- python TCP协议详解 三次握手四次挥手和11种状态
11种状态解析 LISTEN -------------------- 等待从任何远端TCP 和端口的连接请求. SYN_SENT --------------- 发送完一个连接请求后等待一个 ...