这题建图没什么特别

x个条件:Sb-Sa<=c

y个条件:Sa-Sb<=-c

题目问的是。1和n之间的关系。

有负环的话,整个就不可能成立,输出-1

假设图是连通的(1到n是连通的),就输出d[n]

不连通就是题目中说-2的情况。

原来我们建图一般加入一个附加结点,或者開始就把全部点入队,就是考虑到不连通的问题,所以加入一个没有意义的条件。

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
#define eps 1e-6
#define ll __int64
using namespace std;
#define N 1010 struct node
{
int v,w,next;
}e[30020];
int d[N],inq[N],outq[N],n,head[N],h; void addedge(int a,int b,int c)
{
e[h].v=b;
e[h].w=c;
e[h].next=head[a];
head[a]=h++;
} int spfa(int s)
{
memset(d,0x3f,sizeof d);
memset(inq,0,sizeof inq);
memset(outq,0,sizeof outq);
d[s]=0;inq[s]=1;
queue<int> q;
q.push(s);
int i,x;
while(!q.empty())
{
x=q.front();
q.pop();
inq[x]=0;
outq[x]++;
if(outq[x]>n) return 0;
for(i=head[x];i!=-1;i=e[i].next)
{
if(d[e[i].v]>d[x]+e[i].w)
{
d[e[i].v]=d[x]+e[i].w;
if(!inq[e[i].v])
{
inq[e[i].v]=1;
q.push(e[i].v);
}
}
}
}
return 1;
} void init()
{
memset(head,-1,sizeof head);
h=0;
} int main()
{
int T,a,b,c,x,y;
scanf("%d",&T);
while(T--)
{
init();
scanf("%d%d%d",&n,&x,&y);
while(x--)
{
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,c);
}
while(y--)
{
scanf("%d%d%d",&a,&b,&c);
addedge(b,a,-c);
}
if(!spfa(1))
printf("-1\n");
else if(d[n]!=inf)
printf("%d\n",d[n]);
else printf("-2\n");
}
return 0;
}

最新文章

  1. SpringMVC + mybatis + Druid insert 数据库中文乱码,查询无乱码
  2. PHP实现RESTful风格的API实例(三)
  3. SQLite 解决:Could not load file or assembly &#39;System.Data.SQLite ... 试图加载格式不正确的程序/or one of its dependencies. 找不到指定的模块。
  4. HTML&amp;CSS----练习隐藏导航栏(初级)
  5. PHP Deprecated: Comments starting with &#39;#&#39; are deprecated in *.ini 警告解决办法
  6. Javascript生成GUID
  7. Painter 12安装教程
  8. UITableView学习笔记
  9. WebApp
  10. [转]如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误
  11. ecshop 报错
  12. 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
  13. [iOS Animation]CALayer-图层时间
  14. PWM(脉宽调制)——LED特效呼吸灯设计
  15. 把流的形式转化为Base64
  16. sort排序原理
  17. MySQL查询日志总结
  18. 2017-2018-1 JaWorld 第四、五周作业
  19. 在centos7下安装java8和mysql
  20. 使用quartz.jar 、quartz-jobs.jar 实现定时任务 。实现 定时采集 接口数据

热门文章

  1. 本地mongochef连接其他计算机上的数据库认证失败解决方法
  2. Hash二次探测
  3. JS高级——instanceof语法
  4. 一个例子理解ES6的yield关键字
  5. Centos6.7 编译安装 Apache PHP
  6. jboss-eap-6.2修改端口号
  7. mybatis 简单的入门实例
  8. 汇编:MSR/MRS/BIC指令
  9. docker和jenkins安装启动
  10. Configuring SSL on Enterprise Manager and the SLB (Release 12.1.0.2 and later)