看完题目第一遍,感觉很简单。当写完程序跑测试用例的时候,发现第二个总是过不了,然后好好研究了一下测试用例,才知道原来不是程序有问题,而是我的建图方式错了。对于这些无序的点,如果高的在右边,不等式是dis[tall]-dis[short]<=d;如果高的在左边,那么不等式就要变成dis[short]-dis[tall]<=d了。

另一个条件就是1<= dis[i+1]-dis[i] <=d;

一定要选最高的和最低的两个点其中最靠左边的作为源点,那么求一次最短路的意义就是另一个点到它的最远距离。

看代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define Maxn 1010
#define inf 0x7fffffff
#define Maxm Maxn*Maxn
using namespace std;
int dis[Maxn],index[Maxn],vi[Maxn],e,n;
struct Edge{
int to,next,val,from;
}edge[Maxm];
struct Point{
int num,val;
}p[Maxn];
void init()
{
memset(vi,,sizeof(vi));
memset(index,-,sizeof(index));
e=;
for(int i=;i<=n;i++)
{
dis[i]=inf;
}
}
void addedge(int from, int to ,int val)
{
edge[e].to=to;
edge[e].from=from;
edge[e].val=val;
edge[e].next=index[from];
index[from]=e++;
}
int bellman_ford(int u)
{
int i,j,temp,flag;
dis[u]=;
for(i=;i<=n;i++)
{
flag=;
for(j=;j<e;j++)
{
temp=edge[j].from;
if(dis[temp]<inf&&dis[temp]+edge[j].val<dis[edge[j].to])
{
dis[edge[j].to]=dis[temp]+edge[j].val;
flag=;
}
}
if(flag)
return ;
}
return ;
}
int cmp(Point a,Point b)
{
return a.val<b.val;
}
int main()
{
int i,j,t,d,Case=;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&d);
init();
for(i=;i<=n;i++)
{
scanf("%d",&p[i].val);
p[i].num=i;
}
for(i=;i<n;i++)
{
addedge(i+,i,-);
addedge(i,i+,d);
}
sort(p+,p+n+,cmp);
for(i=;i<n;i++)
{
if(p[i].num>p[i+].num)
{
addedge(p[i+].num,p[i].num,d);
addedge(p[i].num,p[i+].num,-);
}
else
{
addedge(p[i].num,p[i+].num,d);
addedge(p[i+].num,p[i].num,-);
} }
int u;
if(p[].num>p[n].num)
u=p[n].num;
else
u=p[].num;
if(bellman_ford(u))
printf("Case %d: %d\n",++Case,abs(dis[p[n].num]-dis[p[].num]));
else
printf("Case %d: -1\n",++Case);
//for(i=1;i<=n;i++)
//cout<<dis[i]<<" ";
//cout<<endl;
}
return ;
}

hdu 3440 差分约束的更多相关文章

  1. hdu 3440(差分约束好题)

    House Man Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. hdu 1531(差分约束)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1531 差分约束的题之前也碰到过,刚好最近正在进行图论专题的训练,就拿来做一做. ①:对于差分不等式,a ...

  3. I - 动物狂想曲 HDU - 6252(差分约束)

    I - 动物狂想曲 HDU - 6252 雷格西桑和路易桑是好朋友,在同一家公司工作.他们总是一起乘地铁去上班.他们的路线上有N个地铁站,编号从1到N.1站是他们的家,N站是公司. 有一天,雷格西桑起 ...

  4. hdu 4598 差分约束

    思路:首先就是判断是否有奇环,若存在奇环,则输出No. 然后用差分约束找是否符合条件. 对于e(i,j)属于E,并且假设顶点v[i]为正数,那么v[i]-v[j]>=T--->v[j]-v ...

  5. hdu 3666(差分约束,手动栈解决超时问题)

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  6. hdu 1364(差分约束)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12056   Accepted: 4397 Description ...

  7. hdu 1534(差分约束+spfa求最长路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...

  8. hdu 1534(差分约束)

    Schedule Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. POJ 1364 / HDU 3666 【差分约束-SPFA】

    POJ 1364 题解:最短路式子:d[v]<=d[u]+w 式子1:sum[a+b+1]−sum[a]>c      —      sum[a]<=sum[a+b+1]−c−1  ...

随机推荐

  1. 用C语言实现ipv4地址字符串是否合法

    用程序实现ipv4地址字符串是否合法,主要考察的是C字符串的操作. 搜索了下,网上没有特别好的实现,自己实现了下,见笑于大家,请指正. #include <stdio.h> #includ ...

  2. PC问题-(仅供备用)取消磁盘的自动扫描

    问题现象:有一次整个单位停电了,之后再开机,每次电脑都自检.现在不想让电脑自检了. 问题原因:可能是因为停电,造成了系统文件的破坏. 问题处理:禁用电脑自检功能(注册表方法). Windows Reg ...

  3. 【C语言】-一维数组

    数组: 数组是一系列相同类型的有序数据的集合,数组中的每一个元素都是同一个数据类型,所有元素共用一个名字,用下标来区别数组中的每一个元素. C语言中,数组属于构造数据类型.一个数组中含有多个数组元素, ...

  4. nginx 502 错误

    今天帮朋友处理一个程序报错,重启nginx服务之后,发现首页打不开了,但是静态文件可以打开 经检查nginx 服务器正常运行,重启无数次仍然502错误,考虑到静态文件可以打开,怀疑可能是php 脚本程 ...

  5. codeforces 630F Selection of Personnel(组合数)

    F. Selection of Personnel time limit per test 0.5 seconds memory limit per test 64 megabytes input s ...

  6. [C语言 - 5] 预处理

    编译之前的处理指令 A.宏定义 a. //Like static constant #define NUM 6 //The truth of macro define is replacing the ...

  7. cookie 编码问题

    问题描述:  Control character in cookie value or attribute. 解决方案: 1.前台编码 encodeURIComponent(str) 2.后台解码 原 ...

  8. 159. Longest Substring with At Most Two Distinct Characters

    最后更新 二刷 08-Jan-17 回头看了下一刷的,用的map,应该是int[256]的意思,后面没仔细看cuz whatever I was doing at that time.. wasnt ...

  9. 在WCF中不使用svc文件直接使用cs文件

    在 配置中有个节点可以实现 此功能 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" > &l ...

  10. S5PV210开发系列四_uCGUI的移植

    S5PV210开发系列四 uCGUI的移植 象棋小子          1048272975 GUI(图形用户界面)极大地方便了非专业用户的使用,用户无需记忆大量的命令,取而代之的是能够通过窗体.菜单 ...