POJ - 3169 SPFA解差分约束除了有解,负环还有另一种情况
题意就是有N头牛排成一个直线..有些牛之间互相讨厌..距离必须大于等于某个...有些牛之间相互暧昧..距离必须小于等于某个...牛的前后顺序和编号是一样的...问这些牛最多能排多长..
比较传统的SPFA解差分约束..但值得注意的是这里出现了除了有解负环还有另一种情况...那就是值不确定...如给出
4 1 0
1 2 1
这时那 3 4 的值根本无从确定...在SPFA过程中的体现是 d [ ] 值是初始的值没有更新...
ps: 刚才看到一句话很好..:
求最大值,做最短路径
求最小值,做最长路径
Program:
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<queue>
#define ok printf("ok!!\n")
#define MAXN 1001
#define oo 0x7F
using namespace std;
struct p1
{int x,y,k,next;
}line[MAXN*31];
int n,m,ml,md,p,x,y,k,i,link[MAXN],h,d[MAXN],sum[MAXN];
bool used[MAXN];
queue<int> myqueue;
int SPFA()
{ while (!myqueue.empty()) myqueue.pop();memset(d,oo,sizeof(d));memset(used,false,sizeof(used));memset(sum,0,sizeof(sum));myqueue.push(1); d[1]=0; sum[1]=1;while (!myqueue.empty()){h=myqueue.front();myqueue.pop();used[h]=false;k=link[h];while (k){if (d[line[k].y]>d[h]+line[k].k){d[line[k].y]=d[h]+line[k].k;if (!used[line[k].y]){used[line[k].y]=true;sum[line[k].y]++;if (sum[line[k].y]>n) return -1;myqueue.push(line[k].y);}}k=line[k].next;}}if (d[n]==2139062143) return -2;return d[n];
}
int main()
{ while (~scanf("%d%d%d",&n,&ml,&md)){memset(line,0,sizeof(line));memset(link,0,sizeof(link));m=0;while (ml--){scanf("%d%d%d",&x,&y,&k); m++;line[m].x=x; line[m].y=y; line[m].k=k;line[m].next=link[line[m].x];link[line[m].x]=m;}while (md--){scanf("%d%d%d",&x,&y,&k); m++;line[m].x=y; line[m].y=x; line[m].k=-k;line[m].next=link[line[m].x];link[line[m].x]=m; }for (i=1;i<n;i++){m++; line[m].x=i+1; line[m].y=i; line[m].k=0;line[m].next=link[line[m].x];link[line[m].x]=m; } printf("%d\n",SPFA());}return 0;
}
POJ - 3169 SPFA解差分约束除了有解,负环还有另一种情况相关推荐
- POJ3169 Layout , 最短路算法解差分约束问题
POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...
- POJ1201/ZOJ1508/HDU1384 Intervals(spfa解差分约束问题)
题意是说给出一些闭区间,这些区间上整点可以选择放一个元素或者不放,但是每个区间都有一个下限,就是说你在这个区间里面的元素个数不能低于这个下限值. 最后要求出最少需要几个元素才能满足每个区间的要求. 建 ...
- POJ 3159 Candies(差分约束+SPAF)
题意: 给n个小朋友分发糖果,但小朋友们之间有嫉妒心.接下来m行,每行三个数,分别表示小朋友A希望B得到的糖果不能比他多x个.要求你计算在满足所有小朋友的条件的情况下最多需要准备多少颗糖. 题目: D ...
- 【POJ1021】Intervals (最短路解差分约束)
题目: Sample Input 5 3 7 3 8 10 3 6 8 1 1 3 1 10 11 1 Sample Output 6 题意: 我们选数,每个数只能选一次.给定n个条件[ai,bi]和 ...
- 【图论】差分约束算法详解
一.前言 在介绍差分约束之前,我们首先需要知道差分约束是用来解决什么问题的:差分约束是一个用来解决形如 X<=Y+c 的二元不等式组的可行解的一个算法.在高中数学中我们会学习如何使用线性规划的方 ...
- UVA 11478 Halum(用bellman-ford解差分约束)
对于一个有向带权图,进行一种操作(v,d),对以点v为终点的边的权值-d,对以点v为起点的边的权值+d.现在给出一个有向带权图,为能否经过一系列的(v,d)操作使图上的每一条边的权值为正,若能,求最小 ...
- 【UVA11478】Halum (最短路解差分约束)
题目: Sample Input 2 1 1 2 10 2 1 1 2 -10 3 3 1 2 4 2 3 2 3 1 5 4 5 2 3 4 4 2 5 3 4 2 3 1 0 1 2 -1 Sam ...
- POJ 3259 Wormholes(bellman_ford,判断有没有负环回路)
题意:John的农场里field块地,path条路连接两块地,hole个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts.我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前 ...
- 谈SPFA解差分约束最大值最小值的原理...
自我分析,为什么用SPFA解差分方程,用最短路径求差分方程的最大解:用最长路径求差分方程的最小解. 如果给出的是一组: a2 - a1 <= k1 a3 - a1 <= k2 .... 之 ...
最新文章
- java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解
- ​70行Go代码打败C
- mysql.msi卸载_MySql安装与卸载的详细教程
- scrapy 模块功能流程--转
- Spring Cloud微服务实战pdf
- 对产品经理而言,有一种灾难叫“老板说”
- 信息系统项目管理师-项目成熟度模型、量化项目管理核心知识点思维脑图
- 在阿里云服务器(Ubuntu系统)下使用WordPress搭建博客网站教程
- NYOJ 1068 ST(线段树之 成段更新+区间求和)
- Couchbase:使用Twitter和Java创建大型数据集
- python自动取款机程序_python ATM取款机----运维开发初学(上篇)
- linux中的进程有哪三种基本状态,Linux下的进程有哪三种状态?()
- 互联网架构设计漫谈 (1)-概述
- 一些Layout的坑
- 从零基础入门Tensorflow2.0 ----六、27 卷积神经网络(2)
- ubuntu MySQL数据库输入中文乱码 解决方案
- php pdo exec,PDO::exec
- 端午节送点话费给大家,千万别错过!
- 展示csdn的云服务
- Total Bummer:关键水滴