题目链接:http://poj.org/problem?id=3169

很好的差分约束入门题目,自己刚看时学呢

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<queue>
  6. using namespace std;
  7. #define INF 0x3f3f3f3f
  8. #define maxn 1010
  9. int dis[maxn];
  10. int path[maxn];
  11. int inq[maxn];
  12. int cnt[maxn];
  13. class node
  14. {
  15. public:
  16. int to;
  17. int w;
  18. int next;
  19. };
  20. node edge[maxn*];
  21. int head[maxn*];
  22. int tol;
  23. int n,ML,MD;
  24. void add(int u,int v,int w)
  25. {
  26. edge[tol].to=v;
  27. edge[tol].w =w;
  28. edge[tol].next=head[u];
  29. head[u]=tol++;
  30. };
  31. queue<int>Q;
  32. bool SPFA()
  33. {
  34. memset(inq,,sizeof(inq));
  35. memset(cnt,,sizeof(cnt));
  36. int v0=;
  37. for(int i=;i<=n;i++)
  38. {
  39. dis[i]=INF;
  40. path[i]=v0;
  41. inq[i]=;
  42. }
  43. dis[v0]=;
  44. path[v0]=v0;
  45. inq[v0]++;
  46. cnt[v0]++;
  47. Q.push(v0);
  48. while(!Q.empty())
  49. {
  50. int u=Q.front();
  51. Q.pop();
  52. inq[u]--;
  53. int tmp=head[u];
  54.  
  55. while(tmp!=-)
  56. {
  57. int v=edge[tmp].to;
  58. int w=edge[tmp].w;
  59. if(dis[v]>dis[u]+w)
  60. {
  61. dis[v]=dis[u]+w;
  62. path[v]=u;
  63. if(inq[v]==)
  64. {
  65. inq[v]++;
  66. if(++cnt[v]>n) return false;
  67. Q.push(v);
  68.  
  69. }
  70. }
  71. tmp=edge[tmp].next;
  72. }
  73. }
  74. return true;
  75. }
  76. int main()
  77. {
  78. int a,b,d;
  79. while(scanf("%d%d%d",&n,&ML,&MD)!=EOF)
  80. {
  81. tol=;
  82. memset(head,-,sizeof(head));
  83. while(ML--)
  84. {
  85. scanf("%d%d%d",&a,&b,&d);
  86. add(a,b,d);
  87.  
  88. }
  89. while(MD--)
  90. {
  91. scanf("%d%d%d",&a,&b,&d);
  92. add(b,a,-d);
  93. }
  94. if(!SPFA()) cout<<"-1"<<endl;
  95. else
  96. if(dis[n]>=INF) cout<<"-2"<<endl;
  97. else cout<<dis[n]<<endl;
  98.  
  99. }
  100. return ;
  101. }

poj Layout 差分约束+SPFA的更多相关文章

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

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

  2. POJ 1201 差分约束+SPFA

    思路: 差分约束,难在建图.(我是不会告诉你我刚学会SPFA的...) 把每个区间的ai–>bi连一条长度为ci的边. k–>k+1连一条长度为0的边. k+1–>k连一条长度为-1 ...

  3. O - Layout(差分约束 + spfa)

    O - Layout(差分约束 + spfa) Like everyone else, cows like to stand close to their friends when queuing f ...

  4. 【poj3169】【差分约束+spfa】

    题目链接http://poj.org/problem?id=3169 题目大意: 一些牛按序号排成一条直线. 有两种要求,A和B距离不得超过X,还有一种是C和D距离不得少于Y,问可能的最大距离.如果没 ...

  5. POJ 3169 Layout(差分约束+链式前向星+SPFA)

    描述 Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...

  6. poj 3169 Layout(差分约束+spfa)

    题目链接:http://poj.org/problem?id=3169 题意:n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有m ...

  7. (简单) POJ 3169 Layout,差分约束+SPFA。

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

  8. 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  ...

  9. POJ 3159 Candies(差分约束+spfa+链式前向星)

    题目链接:http://poj.org/problem?id=3159 题目大意:给n个人派糖果,给出m组数据,每组数据包含A,B,C三个数,意思是A的糖果数比B少的个数不多于C,即B的糖果数 - A ...

随机推荐

  1. python终端中退格键,方向键不能使用

    在安装Python的时候先安装 yum install readline-devel.x86_64 -y 如果python已经安装过了就重新安装 ./configure    make all mak ...

  2. Linux之split命令

    split - split a file into pieces 切割一个文件至多片 参数: -a, --suffix-length=N     使用的后缀的长度,默认长度为2,例如'aa','ab' ...

  3. React中使用CSSTransitionGroup插件实现轮播图

    动画效果,是一个页面上必不可少的功能,学习一个新的东西,当然就要学习,如何用新的东西,用它的方法去实现以前的东西啦.今天呢,我就在这里介绍一个试用react-addons-css-transition ...

  4. Java进阶之网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  5. Excel图表-"DNA"图

    p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...

  6. QTP自动化测试框架课程的目标

    QTP自动化测试框架课程的目标 随着技术发展演变,qtp自动化测试工具有逐渐被其他工具和技术替换的趋势,所以我们三个POPTEST合伙人决定把qtp自动化测试的一套课程开放免费,这套qtp自动化测试课 ...

  7. Oracle的基本学习(三)—函数

    一.字符函数   1.大小写控制函数 --lower:使字母变为小写-- --upper:使字母变为大写-- --initcap:使字符的第一个字母变为大写-- select lower('ABC') ...

  8. JSON的数据类型

    数据类型简介 在计算机中,我们需要知道正在处理什么类型的数据,因为不同类型的数据有着不同的操作途径.可以让两个阿拉伯数字相乘,但是不能让两个单词相乘. 在计算机科学中,有一种数据类型被称为原始数据类型 ...

  9. centos7安装nagios步骤

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  10. 使用PCA + KNN对MNIST数据集进行手写数字识别

    首先引入需要的包 %matplotlib inline import numpy as np import scipy as sp import pandas as pd import matplot ...