【SPOJ116】Intervals
题目大意:有 N 个区间,在区间 [a, b] 中至少取任意互不相同的 c 个整数。求在满足 N 个区间约束的情况下,至少要取多少个正整数。
题解:差分约束系统模板题。
差分约束系统是对于 N 个变量的 M 组线性约束,每组约束满足的条件形如 \(X_i\le X_j+c\)。当所有约束条件均得到满足的时候,意味着以上 M 组不等式均成立。这时,类比于图论中的单源最短路模型,即:当对一个有向图求完单源最短路算法之后,对于图中每一个节点均满足 \(d[i]\le d[j]+e(i,j)\)。因此,可以将 \(X_i\) 看作有向图中的节点,权值看作边,求单源最短路的过程结束后,自然保证了所有约束条件的成立(无解的情况除外)。
差分约束系统最重要的是如何构造,构造方法大体有:
- 将最优解表示为前缀的形式,这样才能利用到区间的差分性质。
- 考虑最优解前缀的单调性,即:是否隐含着后一项必须大于前一项。
- 对于本题来说,还需要考虑每个位置的点只能被选择一次。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e4+10;
inline int read(){
int x=0,f=1;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
return f*x;
}
struct node{
int nxt,to,w;
}e[maxn<<2];
int tot=1,head[maxn];
inline void add_edge(int from,int to,int w){
e[++tot]=(node){head[from],to,w},head[from]=tot;
}
int n,bl,br,d[maxn];
queue<int> q;
bool in[maxn];
void read_and_parse(){
n=read(),bl=1e8,br=-1e8;
for(int i=1;i<=n;i++){
int l=read()+1,r=read()+1,c=read();
bl=min(bl,l),br=max(br,r);
add_edge(l-1,r,c);
}
for(int i=bl;i<=br;i++)add_edge(i-1,i,0),add_edge(i,i-1,-1);
}
void spfa(){
fill(in+bl,in+br+1,0);
fill(d+bl,d+br+1,-1e9);
d[bl-1]=0,in[bl-1]=1,q.push(bl-1);
while(q.size()){
int u=q.front();q.pop(),in[u]=0;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to,w=e[i].w;
if(d[v]<d[u]+w){
d[v]=d[u]+w;
if(!in[v])in[v]=1,q.push(v);
}
}
}
}
void solve(){
spfa();
printf("%d\n",d[br]);
}
void init(){
memset(head,0,sizeof(head)),tot=1;
}
int main(){
int T=read();
while(T--){
init();
read_and_parse();
solve();
}
return 0;
}
【SPOJ116】Intervals的更多相关文章
- 【POJ】【3680】Intervals
网络流/费用流 引用下题解: lyd: 首先把区间端点离散化,设原来的数值i离散化后的标号是c[i].这样离散化之后,整个数轴被分成了一段段小区间. 1.建立S和T,从S到离散化后的第一个点连容量K, ...
- 【poj1201】 Intervals
http://poj.org/problem?id=1201 (题目链接) 题意 给出n个区间${[ai,bi]}$,要求选出尽可能少的数,使得每个区间i中至少存在${c[i]}$个数. Soluti ...
- 【POJ1021】Intervals (最短路解差分约束)
题目: Sample Input 5 3 7 3 8 10 3 6 8 1 1 3 1 10 11 1 Sample Output 6 题意: 我们选数,每个数只能选一次.给定n个条件[ai,bi]和 ...
- 【XSY1841】Intervals
Description 在一个长度为m的序列中选出n个区间,这些区间互不包含,且至少有一个区间的左端点为x. 问有多少种方案,注意交换两个区间的顺序视为不同方案. 答案很大,输出模10000000 ...
- 【POJ3680】Intervals(费用流)
题意:有n条线段,每条有起点,终点和一个权值 要求选取一些线段,使它们的权值和最大,并且使每一个点被覆盖不超过k次 1 ≤ K ≤ N ≤ 200 1 ≤ ai < bi ≤ 100,000, ...
- 【题解】Intervals
题目大意 有\(n\)个区间(\(1 \leq n \leq 200\)),第\(i\)个区间覆盖\((a_{i}, b_{i})\)且有权值\(w_{i}\)(\(1 \leq a_{i} &l ...
- 【HDOJ图论题集】【转】
=============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...
- 【POJ 1201 Intervals】
Time Limit: 2000MSMeamory Limit: 65536K Total Submissions: 27949Accepted: 10764 Description You are ...
- 【POJ 1201】 Intervals(差分约束系统)
[POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS Memory Limit: ...
随机推荐
- idea 最新破解亲测有效
选择License serverLicense server address: 填:http://active.chinapyg.com/ (不能用了) 2018-5-7更新 新增一个 http:// ...
- Kafka-Flume-elasticsearch
a1.sources = kafkaSource a1.channels = memoryChannel a1.sinks = elasticsearch a1.sources.kafkaSource ...
- cookie,localStorage和sessionStorage区别
三者的异同 特性 Cookie localStorage sessionStorage 数据的生命期 一般由服务器生成,可设置失效时间.如果在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清 ...
- WPF当属性值改变时利用PropertyChanged事件来加载动画
在我们的程序中,有时我们需要当绑定到UI界面上的属性值发生变化从而引起数据更新的时候能够加载一些动画,从而使数据更新的效果更佳绚丽,在我们的程序中尽量将动画作为一种资源放在xaml中,而不是在后台中通 ...
- C#使用WebClient下载文件到本地目录
C#使用WebClient下载文件到本地目录. 1.配置本地目录路径 <appSettings> <!--文件下载目录--> <add key="Downloa ...
- Ubuntu Firefox HTML5
sudo apt-get install ubuntu-restricted-extras
- 如何使用CSS 让Table的最后一列的右边框不显示
table{ border-collapse:collapse; } .templateColumn{ border-right:1px solid #AAA; } table.templateCon ...
- controller层负责创建类传递类给service;service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性;dao层负责数据的持久化
controller层负责创建类传递类给service:service层负责逻辑编写调用dao层 将编写后的类传递到dao层,保证事务的正确性:dao层负责数据的持久化
- struts2 核心过滤器的配置
<!-- struts2 过滤器核心配置--> <filter> <filter-name>struts2</filter-name> <filt ...
- Nginx lingering_close延迟关闭
L:130