P5960 【模板】差分约束算法
题目描述
给出一组包含 $m$ 个不等式,有 $n$ 个未知数的形如:
的不等式组,求任意一组满足这个不等式组的解。
输入格式
第一行为两个正整数 $n,m$,代表未知数的数量和不等式的数量。
接下来 $m$ 行,每行包含三个整数 $c,c',y$,代表一个不等式 $x_c-x_{c'} \leqslant y$。
输出格式
一行,$n$ 个数,表示 $x_1,x_2⋯x_n$ 的一组可行解,如果有多组解,请输出任意一组,无解请输出$NO$。
样例数据
输入
3 3
1 2 3
2 3 -2
1 3 1
输出
5 3 5
分析
将$0$与每个点连一条长度为$0$的边,以$0$为起点求单源最短路,如果判断有负环那么该组不等式无解,否则$x_i=Dis_i$就是一组解
代码
#include <bits/stdc++.h>
#define Enter puts("")
#define Space putchar(' ')
using namespace std;
typedef long long ll;
typedef double Db;
inline ll Read()
{
ll Ans = 0;
char Ch = getchar() , Las = ' ';
while(!isdigit(Ch))
{
Las = Ch;
Ch = getchar();
}
while(isdigit(Ch))
{
Ans = (Ans << 3) + (Ans << 1) + Ch - '0';
Ch = getchar();
}
if(Las == '-')
Ans = -Ans;
return Ans;
}
inline void Write(ll x)
{
if(x < 0)
{
x = -x;
putchar('-');
}
if(x >= 10)
Write(x / 10);
putchar(x % 10 + '0');
}
const int N = 1000000;
int n , m;
int Count[N] , Dis[N] , Head[N];
int Total = 0;
bool Visit[N] , t;
queue <int> Q;
struct Edge
{
int Dis;
int Next;
int To;
}E[2 * N];
inline void Add_Edge(int u , int v , int w)
{
E[++Total].Dis = w;
E[Total].To = v;
E[Total].Next = Head[u];
Head[u] = Total;
}
inline bool SPFA()
{
for(int i = 0; i <= n; i++)
{
Visit[i] = 0;
Dis[i] = 1e6;
}
Visit[0] = 1 , t = 0 , Dis[0] = 0;
Q.push(0);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
Visit[u] = 0;
for(int i = Head[u]; i;i = E[i].Next)
{
int v = E[i].To , w = E[i].Dis;
if(Dis[v] > Dis[u] + w)
{
Dis[v] = Dis[u] + w;
if(Count[v] >= n)
return false;
if(!Visit[v])
Visit[v] = 1 , Count[v]++ , Q.push(v);
}
}
}
return true;
}
int main()
{
n = Read() , m = Read();
for(int i = 1; i <= m; i++)
{
int u = Read() , v = Read() , w = Read();
Add_Edge(v , u , w);
}
for(int i = 1; i <= n; i++)
Add_Edge(0 , i , 0);
if(SPFA() == false)
puts("NO");
else
for(int i = 1; i <= n; i++)
Write(Dis[i]) , Space;
return 0;
}
P5960 【模板】差分约束算法的更多相关文章
- P5960 差分约束算法模板
差分约束 差分约束,一般用来解决有\(n\)个未知数,\(m\)个不等式方程的问题,形如: \[\begin{cases} \ x_{a_1}-x_{b_1}\leq y_1\\ \ x_{a_2}- ...
- 差分约束算法————洛谷P4878 [USACO05DEC] 布局
题目: 不难看出题意主要是给出ml+md个格式为xi-xj<=ak的不等式,xi-xj为i,j俩头牛的距离,要我们求x1-xn的最大值. 经过上下加减我们可以将这几个不等式化成x1-xn< ...
- 鉴于spfa基础上的差分约束算法
怎么搞? 1. 如果要求最大值 想办法把每个不等式变为标准x-y<=k的形式,然后建立一条从y到x权值为k的边,变得时候注意x-y<k =>x-y<=k ...
- 差分约束+spfa【模板】
相比dij,spfa优点是可处理含负边不含负圈的最短路问题,缺点是算法复杂度不太好[貌似可以使用两种优化.LLL和SLF] 差分约束就是将一些不等式转化为图中的带权边,然后求解最短路或最长路的方法 洛 ...
- bzoj 2330 [SCOI2011]糖果 差分约束模板
题目大意 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...
- 算法复习——差分约束(ssoi种树)
题目: 题目描述 为了绿化乡村,H 村积极响应号召,开始种树了. H 村里有 n 幢房屋,这些屋子的排列顺序很有特点,在一条直线上.于是方便起见,我们给它们标上 1-n .树就种在房子前面的空地上. ...
- POJ-3159(差分约束+Dijikstra算法+Vector优化+向前星优化+java快速输入输出)
Candies POJ-3159 这里是图论的一个应用,也就是差分约束.通过差分约束变换出一个图,再使用Dijikstra算法的链表优化形式而不是vector形式(否则超时). #include< ...
- POJ 3159 Candies(差分约束,最短路)
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 20067 Accepted: 5293 Descrip ...
- POJ 1364 King --差分约束第一题
题意:求给定的一组不等式是否有解,不等式要么是:SUM(Xi) (a<=i<=b) > k (1) 要么是 SUM(Xi) (a<=i<=b) < k (2) 分析 ...
随机推荐
- MinGW 可以编译驱动的
#include <ddk/ntddk.h> static VOID STDCALLmy_unload( IN PDRIVER_OBJECT DriverObject ) {} NTSTA ...
- Redis数据结构—链表与字典
目录 Redis数据结构-链表与字典 链表 Redis链表节点的结构 Redis链表的表示 Redis链表用在哪 字典 Redis字典结构总览 Redis字典结构分解 哈希算法 解决键冲突 rehas ...
- PHP 读取文件夹(比如某共享文件夹)中的图片并显示
1.获取文件夹下图片public function albumList(){ $share_url = input('path'); $files = getImgList($share_url); ...
- L SERVER 数据库被标记为“可疑”的解决办法
问题背景: 日常对Sql Server 2005关系数据库进行操作时,有时对数据库(如:Sharepoint网站配置数据库名Sharepoint_Config)进行些不正常操作如数据库在读写时而无故停 ...
- 运行程序显示丢失“MSVCR100D.dll”
前言 写了一个Dll注入工具,结果发现程序在其他机器上会出现丢失"MSVCR100D.dll".这个dll是vs2010自带的动态链接库,如果在没安装vs2010运行库的电脑中使用 ...
- UVA OJ 623 500!
500! In these days you can more and more often happen to see programs which perform some useful cal ...
- 分布式锁为什么要选择Zookeeper而不是Redis?
在分布式的应用中,为了防止单点故障,保障高可用,通常会采用主从结构,当主节点挂掉后,从节点可以代替主节点提供服务. Redis通过复制 + sentinel哨兵来实现主从模式. Zookeeper通过 ...
- Spring context的refresh函数执行过程分析
今天看了一下Spring Boot的run函数运行过程,发现它调用了Context中的refresh函数.所以先分析一下Spring context的refresh过程,然后再分析Spring boo ...
- 5分钟让你理解K8S必备架构概念,以及网络模型(下)
写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...
- java基础——if和Swith的应用
顺序结构 java的基本结构就是顺序结构,除非特别说明,否则就按照一句一句的执行 它是任何一个算法都离不开的基本算法结构 选择结构 if单选择 if双选择 if多选择 嵌套的if结构 switch多选 ...