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 ...
随机推荐
- 教程-在F9后提示内存错误,点击了乎略,之后怎么取消乎略?
问题现象:F9后,调试程序,提示内存错误,点击了“乎略”.之后再也没有出现错误了.可是想改这个BUG时,没法取消乎略了. 问题原因:在DLEPHI的选项中是这么一个地方是可以设置的. 问题处理:打开D ...
- HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)
Lucky7 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...
- webservice 缓存机制
本文转载:http://blog.csdn.net/zhdd1234/article/details/4555472 WebService的缓存分为两种,一种是简单的输出缓存,一种是强大的数据缓存 一 ...
- UML图示
来源: http://www.uml.org.cn/oobject/200901041.asp 近些天学习设计.由于没有具体项目,原有项目也没有什么设计的概念,只是看相关的书籍,所以着实有些抓狂.然最 ...
- 教你50招提升ASP.NET性能(二十四):ORM小窍门
ORM TipsORM小窍门 More and more people are using Object to Relational Mapping (ORM) tools to jump the d ...
- POJ2142——The Balance
刚学习的扩展欧几里得算法,刷个水题 求解 线性不定方程 和 模线性方程 求方程 ax+by=c 或 ax≡c (mod b) 的整数解 1.ax+by=gcd(a,b)的一个整数解: <sp ...
- CentOS 6.5安装MySQL中文乱码问题解决
不管是Linux还是Windows都有新手遇到MySQL服务安装好了之后写入中文发现乱码,今天我装了个CentOS 6.5也遇到了这个问题,现在解决了,分享一下经验. 1.首先安装mysql,我很怕麻 ...
- setuptools的使用
1.什么是setuptools setuptoolssetuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,是Python distutil ...
- HDU 4932 贪心
Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- Word2010编号列表&多级列表
1.引用场景 对于一份标准.漂亮的word文档,编号列表和多级列表的设置时必不可少的,正因为有它们,文档看起来才更专业,使用起来才更加的方便.如下面截图一般,这是十分常见的多级列表设置 ...