hdu 3440 差分约束
看完题目第一遍,感觉很简单。当写完程序跑测试用例的时候,发现第二个总是过不了,然后好好研究了一下测试用例,才知道原来不是程序有问题,而是我的建图方式错了。对于这些无序的点,如果高的在右边,不等式是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 差分约束的更多相关文章
- hdu 3440(差分约束好题)
House Man Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 1531(差分约束)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1531 差分约束的题之前也碰到过,刚好最近正在进行图论专题的训练,就拿来做一做. ①:对于差分不等式,a ...
- I - 动物狂想曲 HDU - 6252(差分约束)
I - 动物狂想曲 HDU - 6252 雷格西桑和路易桑是好朋友,在同一家公司工作.他们总是一起乘地铁去上班.他们的路线上有N个地铁站,编号从1到N.1站是他们的家,N站是公司. 有一天,雷格西桑起 ...
- hdu 4598 差分约束
思路:首先就是判断是否有奇环,若存在奇环,则输出No. 然后用差分约束找是否符合条件. 对于e(i,j)属于E,并且假设顶点v[i]为正数,那么v[i]-v[j]>=T--->v[j]-v ...
- hdu 3666(差分约束,手动栈解决超时问题)
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 1364(差分约束)
King Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12056 Accepted: 4397 Description ...
- hdu 1534(差分约束+spfa求最长路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...
- hdu 1534(差分约束)
Schedule Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 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 ...
随机推荐
- HDU 1078 FatMouse and Cheese (记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 老鼠初始时在n*n的矩阵的(0 , 0)位置,每次可以向垂直或水平的一个方向移动1到k格,每次移 ...
- java tools: jstack
SYNOPSIS jstack [ option ] pidclick here to see other detail If the given process is running on a 64 ...
- C#中托管与非托管
在.net 编程环境中,系统的资源分为托管资源和非托管资源. 对于托管的资源的回收工作,是不需要人工干预回收的,而且你也无法干预他们的回收,所能够做的 只是了解.net CLR如何做这些操作.也就是说 ...
- Objc基础学习记录1
1.'-'系在实例方法前头 2.'+'类方法class method 相反; 3.void表示没有返回值; 4.&x 和c语言一样,代表的是x的在内存上的地址; 5.*y指向内存存储空间内的数 ...
- Unity3D之Mecanim动画系统学习笔记(六):使用脚本控制动画
控制人物动画播放 这里我重新弄了一个简单的场景和新的Animator Controller来作为示例. 下面先看看Animator Controller的配置: 人物在站立状态只能进入走路,走路只能进 ...
- Requirements of children
Notion -- encyclopedia Material -- picture, music, video Entertainment -- game Study -- homework, kn ...
- linx目录结构
linux中的命令一般存放在/bin目录下的: 以下为linux下的基本目录结构和作用: /根目录./boot引导程序,内核等存放的目录./sbin超级用户可以使用的命令的存放目录./bin普通用户可 ...
- MDF文件数据恢复
- 基于RealSense的坐姿检测技术
计算机的飞速普及,让人们将越来越多的工作放在计算机上去完成,各行各业,尤其是程序开发人员.文字工作者,在计算机上的工作时间越来越长,这种情况下不良的坐姿对颈肩腰椎都会产生很大影响,容易导致多种疾病的发 ...
- 通过注册表查看已安装 .NetFramework 版本
gci "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP" | % {(Get-ItemProperty registry::$_ ...