3169 Layout
来源:互联网 发布:pmp 培训 知乎 编辑:程序博客网 时间:2024/05/24 22:43
简单的差分约束
看错成一个图,dis[B]-dis[A]<=w,或者dis[B]-dis[A]>=W,然后求出图的最短距离,用bellman-ford算法就可以了
判断图是否有负环,输出-1,否则判断n和1是否可达,如果不行输出-2.否则输出最短距离。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int N =1010;
int n,ml,md;
struct node{
int u,v,w;
}edge[N*10];
int dis[N];
const int INF = 999999;
bool bellford(){
for(int i = 1;i<=n;i++)dis[i] = INF;
dis[1] = 0;
for(int i = 0;i<n;i++)
for(int i = 0;i<md+ml;i++){
if(dis[edge[i].u]!=INF && dis[edge[i].v]>dis[edge[i].u]+edge[i].w)dis[edge[i].v] = dis[edge[i].u]+edge[i].w;
}
for(int i = 0;i<md+ml;i++)if(dis[edge[i].u]!=INF && dis[edge[i].v]>dis[edge[i].u]+edge[i].w)return false;
return true;
}
int main()
{
scanf("%d%d%d",&n,&ml,&md);
for(int i = 0;i<ml;i++){
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
}
int u,v,w;
for(int i = 0;i<md;i++){
scanf("%d%d%d",&u,&v,&w);
edge[i+ml].u = v;
edge[i+ml].v = u;
edge[i+ml].w = -w;
}
if(bellford()){
if(dis[n]!=INF)printf("%d\n",dis[n]);
else printf("-2");
}else {
printf("-1\n");
}
return 0;
}
- 3169 Layout
- poj 3169 Layout
- poj 3169 Layout
- poj 3169 Layout
- POJ 3169 Layout
- poj 3169 layout
- POJ 3169 Layout
- poj 3169 Layout
- ACM POJ 3169 (Layout)
- poj 3169 Layout
- POJ-3169 Layout
- poj 3169 Layout
- POJ 3169 Layout
- POJ No.3169 Layout
- poj 3169 Layout
- poj 3169 Layout
- Poj 3169 Layout
- POJ--3169 Layout
- uva 10098 - Generating Fast
- 使用mouse_event时屏幕绝对坐标如何计算
- wince5.0 开机logo解决方案
- 显式拥塞通知ECN剖析
- 使用 final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 3169 Layout
- 正则表达式
- jQuery获取Select选择的Text和Value:
- UNIX AIX 系统常用命令
- 2015最新收录网址
- Oracle 中表的修改笔记
- jquery还剩多少字符输入
- shell grep 参数详解
- oracle 忘记sys 密码后,更改方法