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

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

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

看代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. #define Maxn 1010
  7. #define inf 0x7fffffff
  8. #define Maxm Maxn*Maxn
  9. using namespace std;
  10. int dis[Maxn],index[Maxn],vi[Maxn],e,n;
  11. struct Edge{
  12. int to,next,val,from;
  13. }edge[Maxm];
  14. struct Point{
  15. int num,val;
  16. }p[Maxn];
  17. void init()
  18. {
  19. memset(vi,,sizeof(vi));
  20. memset(index,-,sizeof(index));
  21. e=;
  22. for(int i=;i<=n;i++)
  23. {
  24. dis[i]=inf;
  25. }
  26. }
  27. void addedge(int from, int to ,int val)
  28. {
  29. edge[e].to=to;
  30. edge[e].from=from;
  31. edge[e].val=val;
  32. edge[e].next=index[from];
  33. index[from]=e++;
  34. }
  35. int bellman_ford(int u)
  36. {
  37. int i,j,temp,flag;
  38. dis[u]=;
  39. for(i=;i<=n;i++)
  40. {
  41. flag=;
  42. for(j=;j<e;j++)
  43. {
  44. temp=edge[j].from;
  45. if(dis[temp]<inf&&dis[temp]+edge[j].val<dis[edge[j].to])
  46. {
  47. dis[edge[j].to]=dis[temp]+edge[j].val;
  48. flag=;
  49. }
  50. }
  51. if(flag)
  52. return ;
  53. }
  54. return ;
  55. }
  56. int cmp(Point a,Point b)
  57. {
  58. return a.val<b.val;
  59. }
  60. int main()
  61. {
  62. int i,j,t,d,Case=;
  63. scanf("%d",&t);
  64. while(t--)
  65. {
  66. scanf("%d%d",&n,&d);
  67. init();
  68. for(i=;i<=n;i++)
  69. {
  70. scanf("%d",&p[i].val);
  71. p[i].num=i;
  72. }
  73. for(i=;i<n;i++)
  74. {
  75. addedge(i+,i,-);
  76. addedge(i,i+,d);
  77. }
  78. sort(p+,p+n+,cmp);
  79. for(i=;i<n;i++)
  80. {
  81. if(p[i].num>p[i+].num)
  82. {
  83. addedge(p[i+].num,p[i].num,d);
  84. addedge(p[i].num,p[i+].num,-);
  85. }
  86. else
  87. {
  88. addedge(p[i].num,p[i+].num,d);
  89. addedge(p[i+].num,p[i].num,-);
  90. }
  91.  
  92. }
  93. int u;
  94. if(p[].num>p[n].num)
  95. u=p[n].num;
  96. else
  97. u=p[].num;
  98. if(bellman_ford(u))
  99. printf("Case %d: %d\n",++Case,abs(dis[p[n].num]-dis[p[].num]));
  100. else
  101. printf("Case %d: -1\n",++Case);
  102. //for(i=1;i<=n;i++)
  103. //cout<<dis[i]<<" ";
  104. //cout<<endl;
  105. }
  106. return ;
  107. }

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. 教程-在F9后提示内存错误,点击了乎略,之后怎么取消乎略?

    问题现象:F9后,调试程序,提示内存错误,点击了“乎略”.之后再也没有出现错误了.可是想改这个BUG时,没法取消乎略了. 问题原因:在DLEPHI的选项中是这么一个地方是可以设置的. 问题处理:打开D ...

  2. HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)

    Lucky7 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...

  3. webservice 缓存机制

    本文转载:http://blog.csdn.net/zhdd1234/article/details/4555472 WebService的缓存分为两种,一种是简单的输出缓存,一种是强大的数据缓存 一 ...

  4. UML图示

    来源: http://www.uml.org.cn/oobject/200901041.asp 近些天学习设计.由于没有具体项目,原有项目也没有什么设计的概念,只是看相关的书籍,所以着实有些抓狂.然最 ...

  5. 教你50招提升ASP.NET性能(二十四):ORM小窍门

    ORM TipsORM小窍门 More and more people are using Object to Relational Mapping (ORM) tools to jump the d ...

  6. POJ2142——The Balance

    刚学习的扩展欧几里得算法,刷个水题 求解  线性不定方程 和  模线性方程 求方程 ax+by=c 或 ax≡c (mod b) 的整数解 1.ax+by=gcd(a,b)的一个整数解: <sp ...

  7. CentOS 6.5安装MySQL中文乱码问题解决

    不管是Linux还是Windows都有新手遇到MySQL服务安装好了之后写入中文发现乱码,今天我装了个CentOS 6.5也遇到了这个问题,现在解决了,分享一下经验. 1.首先安装mysql,我很怕麻 ...

  8. setuptools的使用

    1.什么是setuptools setuptoolssetuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,是Python distutil ...

  9. HDU 4932 贪心

    Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  10. Word2010编号列表&多级列表

    1.引用场景         对于一份标准.漂亮的word文档,编号列表和多级列表的设置时必不可少的,正因为有它们,文档看起来才更专业,使用起来才更加的方便.如下面截图一般,这是十分常见的多级列表设置 ...