【题目大意】

n头牛从小到大排,它们之间某些距离不能大于一个值,某些距离不能小于一个值,求第一头牛和第N头牛之间距离的最大值。

【思路】

由题意可以得到以下不等式d[AL]+DL≥d[BL];d[BD]+(-DD)≥d[AD];d[i+1]+0≥d[i],显然是差分约束系统。即构造从AL到BL权值为DL的边,从BD到AD构造权值为-DD的负边,从i+1到i构造权值为0的边。最后求最短路径。安利一个证明(点我)。

对于差分约束系统要注意的是,如果要求最大距离,用最短路径;求最小距离,用最长路径,要根据实际情况判断。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. const int MAXN=+;
  7. struct Rec
  8. {
  9. int ori,des,len;
  10. };
  11. int n,ml,md;
  12. int first[MAXN/],next[MAXN*+];
  13. Rec edge[MAXN*+];
  14. int vis[MAXN/],dis[MAXN/],appear[MAXN/];
  15.  
  16. void init()
  17. {
  18. memset(first,-,sizeof(first));
  19. scanf("%d%d%d",&n,&ml,&md);
  20. int j=-;
  21. for (int i=;i<ml;i++)
  22. {
  23. j++;
  24. scanf("%d%d%d",&edge[j].ori,&edge[j].des,&edge[j].len);
  25. edge[j].ori--;edge[j].des--;
  26. next[j]=first[edge[j].ori];
  27. first[edge[j].ori]=j;
  28. }
  29. for (int i=;i<md;i++)
  30. {
  31. j++;
  32. scanf("%d%d%d",&edge[j].des,&edge[j].ori,&edge[j].len);
  33. edge[j].ori--;edge[j].des--;
  34. edge[j].len=-edge[j].len;
  35. next[j]=first[edge[j].ori];
  36. first[edge[j].ori]=j;
  37. }
  38. for (int i=;i<n;i++)
  39. {
  40. j++;
  41. edge[j].ori=i;edge[j].des=i-;edge[j].len=;
  42. next[j]=first[edge[j].ori];
  43. first[edge[j].ori]=j;
  44. }
  45. }
  46.  
  47. void SPFA()
  48. {
  49. queue<int> que;
  50. memset(vis,,sizeof(vis));
  51. memset(appear,,sizeof(appear));
  52. for (int i=;i<n;i++) dis[i]=0x7fffffff;
  53. dis[]=;
  54. que.push();
  55. vis[]=;
  56. appear[]++;
  57.  
  58. while (!que.empty())
  59. {
  60. int head=que.front();
  61. int k=first[head];
  62. while (k!=-)
  63. {
  64. Rec e=edge[k];
  65. if (dis[e.des]>dis[e.ori]+e.len)
  66. {
  67. dis[e.des]=dis[e.ori]+e.len;
  68. if (!vis[e.des])
  69. {
  70. appear[e.des]++;
  71. if (appear[e.des]>n)
  72. {
  73. cout<<-<<endl;
  74. return;
  75. }
  76. que.push(e.des);
  77. vis[e.des]=;
  78. }
  79. }
  80. k=next[k];
  81. }
  82. vis[head]=;
  83. que.pop();
  84. }
  85. if (dis[n-]==0x7fffffff) cout<<-<<endl; else cout<<dis[n-]<<endl;
  86. }
  87.  
  88. int main()
  89. {
  90. init();
  91. SPFA();
  92. system("pause");
  93. return ;
  94. }

【差分约束系统/SPFA】POJ3169-Layout的更多相关文章

  1. 差分约束系统 + spfa(A - Layout POJ - 3169)

    题目链接:https://cn.vjudge.net/contest/276233#problem/A 差分约束系统,假设当前有三个不等式 x- y <=t1 y-z<=t2 x-z< ...

  2. BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA

    最小值求最长路. 最大值求最短路. 发现每个约束条件可以转化为一条边,表示一个点到另外一个点至少要加上一个定值. 限定了每一个值得取值下界,然后最长路求出答案即可. 差分约束系统,感觉上更像是两个变量 ...

  3. 差分约束系统 POJ 3169 Layout

    题目传送门 题意:有两种关系,n牛按照序号排列,A1到B1的距离不超过C1, A2到B2的距离不小于C2,问1到n的距离最大是多少.如果无限的话是-2, 如果无解是-1 分析:第一种可以写这样的方程: ...

  4. 差分约束系统+spfa(B - World Exhibition HDU - 3592 )

    题目链接:https://cn.vjudge.net/contest/276233#problem/B 思路和上一个一样,不过注意点有两个,第一,对dis数组进行初始化的时候,应该初始化成ox3f3f ...

  5. PKU 1201 Intervals(差分约束系统+Spfa)

    题目大意:原题链接 构造一个集合,这个集合内的数字满足所给的n个条件,每个条件都是指在区间[a,b]内至少有c个数在集合内.问集合最少包含多少个点.即求至少有多少个元素在区间[a,b]内. 解题思路: ...

  6. POJ3169 Layout

    Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...

  7. ACM/ICPC 之 差分约束系统两道(ZOJ2770-POJ1201)

    当对问题建立数学模型后,发现其是一个差分方程组,那么问题可以转换为最短路问题,一下分别选用Bellmanford-SPFA解题 ZOJ2770-Burn the Linked Camp //差分约束方 ...

  8. POJ-3169 Layout (差分约束+SPFA)

    POJ-3169 Layout:http://poj.org/problem?id=3169 参考:https://blog.csdn.net/islittlehappy/article/detail ...

  9. POJ3169 Layout(差分约束系统)

    POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...

随机推荐

  1. 凸包入门(Graham扫描法)(A - Wall POJ - 1113)

    题目链接:https://cn.vjudge.net/contest/276359#problem/A 题目大意:有一个国王,要在自己的城堡周围建立围墙,要求围墙能把城堡全部围起来,并且围墙距离城堡的 ...

  2. ubuntu的PPA

    PPA,表示Personal Package Archives,也就是个人软件包集很多软件包由于各种原因吧,不能进入官方的Ubuntu软件仓库.为了方便Ubuntu用户使用,launchpad.net ...

  3. 洛谷 P4093: bzoj 4553: [HEOI2016/TJOI2016]序列

    题目传送门:洛谷P4093. 题意简述: 给定一个长度为 \(n\) 的序列 \(a\). 同时这个序列还可能发生变化,每一种变化 \((x_i,y_i)\) 对应着 \(a_{x_i}\) 可能变成 ...

  4. 25 个常用的 Linux iptables 规则【转】

    转自 25 个常用的 Linux iptables 规则 - 文章 - 伯乐在线http://blog.jobbole.com/108468/ # 1. 删除所有现有规则 iptables -F # ...

  5. MVC Ajax Form & Ajax Valida(笔记)

    1.引入必要的文件 <script src=.min.js")" type="text/javascript"></script> &l ...

  6. SPOJ 16549 - QTREE6 - Query on a tree VI 「一种维护树上颜色连通块的操作」

    题意 有操作 $0$ $u$:询问有多少个节点 $v$ 满足路径 $u$ 到 $v$ 上所有节点(包括)都拥有相同的颜色$1$ $u$:翻转 $u$ 的颜色 题解 直接用一个 $LCT$ 去暴力删边连 ...

  7. TCP协议端口状态说明:CLOSE-WAIT、TIME-WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST-ACK ...

    了解TCP协议端口的连接状态,对排除和定位网络或系统故障会有很大帮助,因此了解一下是有必要的: 一.LISTENING  提供某种服务,侦听远方TCP端口的连接请求,当提供的服务没有被连接时,处于LI ...

  8. PHP SPL使用方法 自动加载和迭代器

    SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟.SPL 其实在所有的 PHP5 开发环境中被内置,同 ...

  9. c语言循环链表的问题

    今天,老师说了一道题,大意是,有一群小朋友10个人,但是老师只有一个苹果,只能给一个小朋友,于是老师就决定让小朋友们做成一圈,从第一个小朋友开始,每隔一个小朋友就没有机会得到苹果,最后剩下的一个人可以 ...

  10. hdu 3389 阶梯博弈

    题意:1-N带编号的盒子,当编号满足A>B && A非空 && (A + B) % 3 == 0 && (A + B) % 2 == 1则可以从A ...