POJ 3169 差分约束
来源:互联网 发布:网络弧是什么意思 编辑:程序博客网 时间:2024/05/16 23:33
题意:
有一群老牛,给你m1组关系a ,b ,c,说明a,b之间的距离大于小于等于c,m2组关系a ,b ,c说明a ,b之间的距离大于等于c,问你是否有可行解,如果没有输出-1 ,如果有输出1,n的最大距离,如果最大距离是INF输出-2;
思路:
有一群老牛,给你m1组关系a ,b ,c,说明a,b之间的距离大于小于等于c,m2组关系a ,b ,c说明a ,b之间的距离大于等于c,问你是否有可行解,如果没有输出-1 ,如果有输出1,n的最大距离,如果最大距离是INF输出-2;
思路:
显然是查分约束,这个题目的隐含条件就是任意两点的距离都大于等于0,把这个条件加进去,然后就是一遍最短路,一定要记住在查分约束系统中,最小的可行解就跑最长路,最大的可行解救跑最短路。
#include<stdio.h>#include<string.h>#include<queue>#define N_node 1000 + 10#define N_edge 20000 + 200#define INF 100000000using namespace std;typedef struct{ int to ,next ,cost;}STAR;STAR E[N_edge];int list[N_node] ,tot;int s_x[N_node];void add(int a ,int b ,int c){ E[++tot].to = b; E[tot].cost = c; E[tot].next = list[a]; list[a] = tot;}bool spfa(int s ,int n){ for(int i = 0 ;i <= n ;i ++) s_x[i] = INF; int mark[N_node] = {0}; int in[N_node] = {0}; s_x[s] = 0; mark[s] = in[s] = 1; queue<int>q; q.push(s); while(!q.empty()) { int xin ,tou; tou = q.front(); q.pop(); mark[tou] = 0; for(int k = list[tou] ;k ;k = E[k].next) { xin = E[k].to; if(s_x[xin] > s_x[tou] + E[k].cost) { s_x[xin] = s_x[tou] + E[k].cost; if(!mark[xin]) { if(++in[xin] > n) return 0; mark[xin] = 1; q.push(xin); } } } } return 1;} int main (){ int n ,m1 ,m2; int i ,a ,b ,c; while(~scanf("%d %d %d" ,&n ,&m1 ,&m2)) { memset(list ,0 ,sizeof(list)) ,tot = 1; for(i = 1 ;i <= m1 ;i ++) { scanf("%d %d %d" ,&a ,&b ,&c); add(a,b ,c); } for(i = 1 ;i <= m2 ;i ++) { scanf("%d %d %d" ,&a ,&b ,&c); add(b ,a ,-c); } for(i = 1 ;i < n ;i ++) add(i + 1 ,i ,0); if(!spfa(1 ,n)) printf("-1\n"); else if(s_x[n] == INF) printf("-2\n"); else printf("%d\n" ,s_x[n]); } return 0;}
0 0
- poj 3169 差分约束
- POJ 3169 差分约束
- POJ 3169 差分约束
- POJ 3169 差分约束
- poj 3169 差分约束
- POJ 3169 差分约束
- POJ 3169 差分约束
- poj 3169 差分约束
- POJ 3169 差分约束
- 【POJ 3169】差分约束
- POJ 3169 Layout(差分约束系统)
- poj 3169 差分约束 + spfa
- POJ 3169 Layout [差分约束]
- POJ 3169 差分约束系统
- POJ 3169 Layout 差分约束系统
- POJ 3169 Layout 差分约束系统
- poj 3169 Layout(差分约束)
- poj 3169 Layout(差分约束)
- Java问答:终极父类(2)—下篇
- 女人
- spring3.1.1的各个jar作用
- Android Wakelock
- Http协议与TCP协议简单理解
- POJ 3169 差分约束
- 成都php培训 PHP培训哪家学校靠谱
- 面向GC的Java编程
- 串口中怎样接收一个完整数据包的解析
- AWK学习总结(三) Records and Fields
- Linux桌面鼠标取词自动翻译
- MYSQL启用日志,和查看日志
- 10个有关String的面试问题
- Java 内存分配全面浅析