zoj4028 LIS
差分约束瞎搞一下,话说这个数据不知道怎么回事,我的图按道理而言最多只有4n条边,开5n还不够??必须6n??
约束条件首先根据f函数可建立两点之间的约束,不妨设d[i]为i到0的距离,则对于f[i] == f[j] + 1(i>j)的情况,必定d[i] - d[j] >= 1,对于f[i] == f[j]的情况,必定d[j] - d[i] >= 0(i>j)
区间范围就不说了吧。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<string>
#include<set>
#include<algorithm>
#include<vector>
#include<queue>
#include<list>
#include<cmath>
#include<cstring>
#include<map>
#include<stack>
using namespace std;
#define check(x,y) (x>=5&&y>=5&&x<n+5&&y<m+5)
#define dight(chr) (chr>='0'&&chr<='9')
#define alpha(chr) (chr>='a'&&chr<='z')
#define rep(i,a,n) for(int i=a;i<n;++i)
#define repe(i,a,n) for(int i=a;i<=n;++i)
#define per(i,n,a) for(int i=n;i>=a;--i)
#define loop(a) for(int i=0;i<a;++i)
#define loope(a) for(int i=1;i<=a;++i)
#define clc(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f3f3f3f
#define maxn 100005
#define ull unsigned long long
#define ll long long
#define hashmod 99999839
#define mod 1000000000
#define repe(x,y,i) for(i=(x);i<=(y);++i)
#define repne(x,y,i) for(i=(x);i<(y);++i)
#define MAX(x,y) (x) < (y) ? (y) : (x);
struct edge{
int to;
int cost;
int next;
}G[];
int f,l,r,p[maxn],len;
int head[maxn],n;
ll dis[maxn];
bool inq[maxn];
void Read(int &n){char chr=getchar(),sign=;for(;!dight(chr);chr=getchar())if(chr=='-')sign=-;
for(n=;dight(chr);chr=getchar())n=n*+chr-'';n*=sign;}
void Read(ll &n){char chr=getchar(),sign=;for(;!dight(chr);chr=getchar())if
(chr=='-')sign=-;
for(n=;dight(chr);chr=getchar())n=n*+chr-'';n*=sign;}
void spfa(int st){
queue<int> q;
memset(inq,false,sizeof(inq));
for(int i = ;i <= n;++i) dis[i] = INF;
q.push(st);
inq[st] = true;
dis[st] = ;
while(!q.empty()){
int v = q.front();
q.pop();
inq[v] = false;
for(int i = head[v];i;i = G[i].next){
edge& t = G[i];
if(dis[t.to] > dis[v] + t.cost){
dis[t.to] = dis[v] + t.cost;
if(!inq[t.to]) q.push(t.to);
}
}
}
for(int i = ;i < n;++i) printf("%lld ",dis[i]);
printf("%lld\n",dis[n]);
}
int main(){
//// freopen("a.in","r",stdin);
// freopen("b.out","w",stdout);
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
len = ;
memset(head,,sizeof(head));
memset(p,,sizeof(p));
Read(f);
p[f] = ;
for(int i = ;i <= n;++i){
Read(f);
if(f == ){
G[len].to = i,G[len].cost = ,G[len].next = head[p[]],head[p[]] = len,++len;
p[f] = i;
continue;
}
int t = p[f - ];
G[len].to = t,G[len].cost = -,G[len].next = head[i],head[i] = len,++len;
t = p[f];
if(t) G[len].to = i,G[len].cost = ,G[len].next = head[t],head[t] = len,++len;
p[f] = i;
}
for(int i = ;i <= n;++i){
Read(l),Read(r);
G[len].to = ,G[len].cost = -l,G[len].next = head[i],head[i] = len,++len;
G[len].to = i,G[len].cost = r,G[len].next = head[],head[] = len,++len;
}
spfa();
}
return ;
}
zoj4028 LIS的更多相关文章
- zoj4028 LIS,差分约束
题意:给你以i为结尾的最长上升子序列的值,和每个值的区间范围求可行的a[i] 题解:差分约束,首先满足l[i]<=a[i]<=r[i],可以建一个虚拟节点n+1,那么有a[n+1]-a[i ...
- Lis日常维护
1.[问题]护士站打印LIs条码,出来是PDF格式的 [解决]在文件夹Client\NeusoftLis\Xml\Print.xml中把BarcodePrint Name的值改成安装的斑马打印机名(不 ...
- uva10635 LIS
Prince and PrincessInput: Standard Input Output: Standard Output Time Limit: 3 Seconds In an n x n c ...
- Codeforces 486E LIS of Sequence 题解
题目大意: 一个序列,问其中每一个元素是否为所有最长上升子序列中的元素或是几个但不是所有最长上升子序列中的元素或一个最长上升子序列都不是. 思路: 求以每一个元素为开头和结尾的最长上升子序列长度,若两 ...
- 出操队形(LIS)
题目来源:微策略2013年校园招聘面试一面试题 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往楼下跑了,然后身高矮的排在队伍的前面,身高较 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- [tem]Longest Increasing Subsequence(LIS)
Longest Increasing Subsequence(LIS) 一个美丽的名字 非常经典的线性结构dp [朴素]:O(n^2) d(i)=max{0,d(j) :j<i&& ...
- 从LIS问题浅谈动态规划
今天以LIS问题切入动态规划,现在做一些简单的总结. LIS问题: http://www.cnblogs.com/Booble/archive/2010/11/27/1889482.html
- [noip科普]关于LIS和一类可以用树状数组优化的DP
预备知识 DP(Dynamic Programming):一种以无后效性的状态转移为基础的算法,我们可以将其不严谨地先理解为递推.例如斐波那契数列的递推求法可以不严谨地认为是DP.当然DP的状态也可以 ...
随机推荐
- mongodb的安装及配置安装服务
1. 安装mongodb数据库 mongodb官方网址:https://www.mongodb.org 安装好之后的步奏: 第一步:规划你的安装目录和数据库文件的存储路径,我打算将Mongo的程序文件 ...
- sccm系统更新补丁后服务无法正常启动
更新完补丁后这几个应用无法启动,最后发现计算机丢失msvcp120.dll 文件,查询相关资料发现安装vcredist 2013 从官网下载Visual C++ Redistributable Pac ...
- expand - 把 tab 符转换为空格符
总览 (SYNOPSIS) ../src/expand [OPTION]... [FILE]... 描述 (DESCRIPTION) 把 各文件 FILE 中的 tab 符 转换为 空格符, 然后 写 ...
- zabbix告警邮件、短信发送错误快速排查方法
zabbix告警邮件.短信发送错误快速排查方法 背景 zabbix告警邮件.短信经常有同事反馈发送错误的情况,这个问题排查的角度很多,那么最快捷的角度是什么呢? 在我看来,最快的角度就是判断这个告警邮 ...
- 主席树-指针实现-找第k小数
主席树,其实就是N颗线段树 只是他们公用了一部分节点(๑•̀ㅂ•́)و✧ 我大部分的代码是从一位大佬的那里看到的 我这个垃圾程序连Poj2104上的数据都过不了TLE so希望神犇能给我看看, 顺便给 ...
- less算宽度 加~ width: calc(~"50% - 35px");
less算宽度 加~ width: calc(~"50% - 35px");
- easyui前端框架01
一. 三大前端框架的特点 1.easyui=jquery+html4 优点:快速开发.功能齐全 .免费 缺点:不好看.不支持相应式开发 2.bootstrap=jquery+html5 优点: 功能强 ...
- 【原创翻译】链接DLL至可执行文件---翻译自MSDN
可执行文件.exe链接(或加载)DLL有以下两种形式: 隐式链接 显式链接 隐式链接是指静态加载或在程序加载时动态链接. 通过隐式链接,在使用DLL时,可执行文件链接到一个由生成DLL的人提供的导入函 ...
- BZOJ3940: [Usaco2015 Feb]Censoring (AC自动机)
题意:在文本串上删除一些字符串 每次优先删除从左边开始第一个满足的 删除后剩下的串连在一起重复删除步骤 直到不能删 题解:建fail 用栈存当前放进了那些字符 如果可以删 fail指针跳到前面去 好菜 ...
- 解决浏览器自动填充input
浏览器输入框自动填充解决办法 emmmmm:今天处理公司后台系统遇到的:登录页面浏览器保存账号密码后:浏览器会自动在其他页面进行填充:解决如下图: 浏览器会默认填充input type值为passwo ...