题目链接:https://cn.vjudge.net/contest/276233#problem/B

思路和上一个一样,不过注意点有两个,第一,对dis数组进行初始化的时候,应该初始化成ox3f3f3f3f3f3f3f,因为这个题目的边权加到一定程度的时候会超过int。第二点,如果是memset,好像不能对dis数组初始化0x3f3f3f3f3f3f3f,然后我用for循环初始化的,就过了。。。

AC代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<stack>
  4. #include<iomanip>
  5. #include<cmath>
  6. #include<queue>
  7. #include<algorithm>
  8. #include<stdio.h>
  9. using namespace std;
  10. # define ll long long
  11. # define inf 0x3f3f3f3f3f3f3f
  12. const int maxn = 1000+100;
  13. const int maxedge= 2000000+10;
  14. int n,ml,md;
  15. int num,head[maxn];
  16. ll dis[maxn];
  17. int out[maxn],vis[maxn];
  18. struct node
  19. {
  20. int to;
  21. ll cost;
  22. int nex;
  23. } edge[maxedge];
  24. void init()
  25. {
  26. num=0;
  27. for(int i=0;i<=n;i++){
  28. dis[i]=inf;
  29. head[i]=-1;
  30. vis[i]=0;
  31. out[i]=0;
  32. }
  33. }
  34. void addedge(int fr,int to,ll cost)
  35. {
  36. edge[num].to=to;
  37. edge[num].cost=cost;
  38. edge[num].nex=head[fr];
  39. head[fr]=num++;
  40. }
  41. ll spfa()
  42. {
  43. queue<int>q;
  44. q.push(1);
  45. dis[1]=0;
  46. vis[1]=1;
  47. out[1]++;
  48. while(!q.empty())
  49. {
  50. int tmp=q.front();
  51. out[tmp]++;
  52. if(out[tmp]>n)
  53. return -1;
  54. q.pop();
  55. vis[tmp]=0;
  56. for(int i=head[tmp]; i!=-1; i=edge[i].nex)
  57. {
  58. int u=edge[i].to;
  59. if(dis[u]>dis[tmp]+edge[i].cost)
  60. {
  61. dis[u]=dis[tmp]+edge[i].cost;
  62. if(vis[u])
  63. continue;
  64. q.push(u);
  65. vis[u]=1;
  66. }
  67. }
  68. }
  69. if(dis[n]==inf)
  70. return -2;
  71. return dis[n];
  72. }
  73. int main()
  74. {
  75. int T;
  76. scanf("%d",&T);
  77. while(T--)
  78. {
  79. int u,v;
  80. ll w;
  81. scanf("%d %d %d",&n,&ml,&md);
  82. init();
  83. for(int i=1; i<=ml; i++)
  84. {
  85. scanf("%d %d %lld",&u,&v,&w);
  86. addedge(u,v,w);
  87. }
  88. for(int i=1; i<=md; i++)
  89. {
  90. scanf("%d %d %lld",&u,&v,&w);
  91. addedge(v,u,-w);
  92. }
  93. ll ans=spfa();
  94. printf("%lld\n",ans);
  95. }
  96. return 0;
  97. }

差分约束系统+spfa(B - World Exhibition HDU - 3592 )的更多相关文章

  1. spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解

    题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...

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

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

  3. 【差分约束系统/SPFA】POJ3169-Layout

    [题目大意] n头牛从小到大排,它们之间某些距离不能大于一个值,某些距离不能小于一个值,求第一头牛和第N头牛之间距离的最大值. [思路] 由题意可以得到以下不等式d[AL]+DL≥d[BL]:d[BD ...

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

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

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

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

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

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

  7. HDU 3666.THE MATRIX PROBLEM 差分约束系统

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. [HDU 1529]Cashier Employment(差分约束系统)

    [HDU 1529]Cashier Employment(差分约束系统) 题面 有一个超市,在24小时对员工都有一定需求量,表示为\(r_i\),意思为在i这个时间至少要有i个员工,现在有n个员工来应 ...

  9. 【差分约束系统】【spfa】UVALive - 4885 - Task

    差分约束系统讲解看这里:http://blog.csdn.net/xuezhongfenfei/article/details/8685313 模板题,不多说.要注意的一点是!!!对于带有within ...

随机推荐

  1. 小程序 获取用户的openid

    wx.login({ success: res => { var code = res.code; //返回code // 小程序appid var appId = 'wxd751fc845c9 ...

  2. jdk10配置

    解压 vi /etc/profile JAVA_HOME=/home/elasticsearch/jdk- CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOM ...

  3. UVA10054_The Necklace

    很简单,求欧拉回路.并且输出. 只重点说一下要用栈来控制输出. 为啥,如图: 如果不用栈,那么1->2->3->1就回来了,接着又输出4->5,发现这根本连接不上去,所以如果用 ...

  4. DAY3-Flask项目

    1.jsonify: 得到了从API获得的数据并返回,API返回的json数据被转化成dict,我们还需要把dict序列化: return json.dump(result), 200, {'cont ...

  5. MT【134】待定系数

    已知\(a,b>0\)且\(ab(a+b)=4\),求\(2a+b\)的最小值______. 解答:\(\sqrt{3}(2a+b)\ge(\sqrt{3}+1)a+b+(\sqrt{3}-1) ...

  6. 【刷题】BZOJ 2049 [Sdoi2008]Cave 洞穴勘测

    Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...

  7. bzoj 3853 : GCD Array

    搬运题解Claris:1 n d v相当于给$a[x]+=v[\gcd(x,n)=d]$ $\begin{eqnarray*}&&v[\gcd(x,n)=d]\\&=& ...

  8. D. Dog Show 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest, qualification stage (Online Mirror, ACM-ICPC Rules, Teams Preferred)

    http://codeforces.com/contest/847/problem/D 巧妙的贪心 仔细琢磨... 像凸包里的处理 #include <cstdio> #include & ...

  9. centos systemctl daemon-reload 提示 no such file or directory 的一个原因

    service 的文件名写错了 比如 mongodb.service 写成了 mongodb.srvice 真的是坑,居然没有提示具体的路径,只是提示一个 no such file or direct ...

  10. 简单易懂的GBDT

    转https://www.cnblogs.com/liuyu124/p/7333080.html 梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法是近年来 ...