cogs 1117 poj 3169 Layout 差分约束系统
来源:互联网 发布:程序员英文 编辑:程序博客网 时间:2024/06/15 21:49
题目:
cogs: > http://cogs.pro/cogs/problem/problem.php?pid=1117
poj: > http://poj.org/problem?id=3169
题意分析
n a b
x[i] x[j] a[k]
…
即有n个对象,a种大于关系,b种小于关系,
以下a行表示x[i]-x[j]>a[k],
接着b行表示x[i]-x[j]>a[k].
求x[1]和x[n]之间的最小距离。
思路
运用差分约束系统就可以轻松完成这个题。
把两头牛之间的最大距离转化成正边,最小距离转化成负边,
将各牛转化为点,相互连接。求1,n之间的最短路即可。
如果存在负权环即不存在任何一种可行方案输出“-1”;
如果1和n之间不存在任何限制那么则可以任意安排,输出“-2”
贴代码=.=:
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#define maxn 1010#define maxe 20010using namespace std;int n,m,a,b,c,u,v,h,t,num,number,head[maxn],dis[maxn],cnt[maxn],team[2*maxn+5];bool boo[maxn];struct edges{ int x,y,next,val;}edge[maxe];void add(int x,int y,int val){ edge[++num].x=x; edge[num].y=y; edge[num].val=val; edge[num].next=head[x]; head[x]=num;}int main(){ scanf("%d%d%d",&number,&n,&m); for(int i=1;i<=n;i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); } for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); add(b,a,-c); } memset(dis,0x3f3f3f3f,sizeof(dis)); h=0;t=1;team[1]=1; dis[1]=0;boo[1]=1; do { h=(h+1)%(maxn*2+5); boo[team[h]]=0; u=team[h]; for(int i=head[u];i;i=edge[i].next) { v=edge[i].y; int val=edge[i].val; if(dis[v]>dis[u]+val) { dis[v]=dis[u]+val; cnt[v]++; if(cnt[v]>number) { printf("-1\n"); return 0; } if(!boo[v]) { boo[v]=1; t=(t+1)%(maxn*2+5); team[t]=v; } } } }while(t!=h); printf("%d\n",dis[number]!=dis[0]&&dis[number]?dis[number]:-2);}
阅读全文
1 0
- cogs 1117 poj 3169 Layout 差分约束系统
- POJ 3169 Layout(差分约束系统)
- POJ 3169 Layout 差分约束系统
- POJ 3169 Layout 差分约束系统
- POJ 3169 Layout(差分约束系统)
- POJ 3169-Layout(差分约束系统)
- POJ 3169 Layout 差分约束系统
- POJ 3169 Layout (差分约束系统)
- POJ 3169 Layout (差分约束系统,Bellman-Ford)
- POJ 3169 Layout(差分约束系统)
- POJ 3169 Layout(差分约束系统+BellmanFord)
- POJ 3169 Layout(差分约束系统)
- HDU(3592)---POJ (3169) Layout 差分约束系统
- POJ 3169 Layout [差分约束]
- poj 3169 Layout(差分约束)
- poj 3169 Layout(差分约束)
- poj 3169 Layout 差分约束
- POJ 3169 Layout (差分约束spfa)
- JDBC详解
- 单列模式
- C++程序员必读:让你的代码更强大
- <iOS开发>之蓝牙使用
- 洛谷 P1057 传球游戏
- cogs 1117 poj 3169 Layout 差分约束系统
- Java 操作excel表格
- 数值分析——c++实现非线性方程求根的方法
- winpacp笔记(六)
- Java Wish List: The Top Differences Between Java, Scala, Groovy, Clojure and Kotlin
- 详解C++11中值得关注的几大变化
- Spark性能优化指南——高级篇
- Python如何导入自定义模块
- mysql转ElasticSearch的案例分析