博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1201 Intervals(差分约束)
阅读量:4919 次
发布时间:2019-06-11

本文共 1248 字,大约阅读时间需要 4 分钟。

 

【题目链接】 

 

【题目大意】 

  告诉你一个区间至少要选定的数字的个数,给出n个区间的需求

  问最少选取几个数字可以满足所有的需求

 

【题解】

  对于区间[a,b]建立不等式Sb+1-Sa>=c,最后要求最小化Smax,

  结合基础条件Si+1-Si>=0,Si-Si+1>=-1,构造差分约束系统求最长路就是答案。

 

【代码】

#include 
#include
#include
using namespace std;const int N=200010,inf=~0U>>2,M=200000;int time[N],q[N],size,h,t,n,ed,dis[N],in[N],nxt[N],w[N],v[N],g[N],ma,mi,u,e,cost;void add(int x,int y,int z){v[++ed]=y;w[ed]=z;nxt[ed]=g[x];g[x]=ed;}int spfa(int S){ for(int i=0;i<=n;i++)dis[i]=-inf,in[i]=0,time[i]=0; time[S]=1,dis[S]=0,in[S]=1; int i,x,size; q[h=t=size=1]=S; while(size){ for(i=g[x=q[h]],h=(h+1)%M,size--;i!=-1;i=nxt[i])if(dis[x]+w[i]>dis[v[i]]){ dis[v[i]]=dis[x]+w[i]; if(!in[v[i]]){ time[v[i]]++,t=(t+1)%M,size++,in[q[t]=v[i]]=1; if(time[v[i]]>n)return -1; } }in[x]=0; }if(dis[n]==-inf)return -2; return dis[n];}int main(){ while(~scanf("%d",&n)){ ed=0;memset(g,-1,sizeof(g)); ma=-inf; mi=inf; for(int i=1;i<=n;i++){ scanf("%d%d%d",&u,&e,&cost); add(u,e+1,cost); ma=max(e+1,ma); mi=min(u,mi); }for(int i=mi;i

转载于:https://www.cnblogs.com/forever97/p/poj1201.html

你可能感兴趣的文章
在Release版本中如何关闭Debug版本中的log
查看>>
WPF 柱状图显示数据
查看>>
iOS 计算字符串显示宽高度
查看>>
JS上传文件、导入文件
查看>>
java 组合接口时的名字冲突
查看>>
课后作业之数组
查看>>
Laravel 引入自定义类库或第三方类库
查看>>
设计模式系列一创建型模式之(简单工厂VS工厂方法)
查看>>
严重: Exception starting filter struts2问题
查看>>
Node.js 使用angularjs取得Nodejs http服务端返回的JSON数组示例
查看>>
重装上了Fedora8自带的MySQL5.0.45,再试,告捷!!
查看>>
AI1.1-人工智能史
查看>>
Mybatis typeAliases别名
查看>>
12 将类处理为excel,再将excel处理为类(界限计划3)
查看>>
《Effective C#》读书笔记——条目24:用委托实现回调<使用C#表达设计>
查看>>
C++刷题——2802: 推断字符串是否为回文
查看>>
24 小时时间比较大小
查看>>
Java实现CORS跨域请求
查看>>
浅谈php web安全
查看>>
转载:C++运算符优先级
查看>>