差分约束
时间:2019-11-20
本文章向大家介绍差分约束,主要包括差分约束使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
对于
\(a+b>c\)
若干个这样的不等式
要求判断有无解
可以从最短路中得到启发
\(d[s]+w_{s->v}<d[v]\)
从\(s\)到\(v\)连一条权值为\(w_{s->v}\)的边
从\(c\)到\(a\)连一条权值为\(-b\)的边
然后 用\(dfs\)优化\(spfa\)
#include <stack>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define reg register int
#define isdigit(x) ('0' <= x&&x <= '9')
template<typename T>
inline T Read(T Type)
{
T x = 0,f = 1;
char a = getchar();
while(!isdigit(a)) {if(a == '-') f = -1;a = getchar();}
while(isdigit(a)) {x = (x << 1) + (x << 3) + (a ^ '0');a = getchar();}
return x * f;
}
const int MAXN = 10010,MAXM = 20010,inf = 0x3f3f3f;
struct EDGE
{
int v,w,_nxt;
}edge[MAXM << 1];
int cnt,_ori[MAXN];
inline void add(int u,int v,int w)
{
edge[++cnt].v = v;
edge[cnt]._nxt = _ori[u];
edge[cnt].w = w;
_ori[u] = cnt;
}
#define code_out {printf("No");exit(0);}
typedef long long ll;
bool vis[MAXN];
ll d[MAXN];
int n,k;
bool able;
inline void _SPFA(int s)
{
vis[s] = 1;
for(reg e = _ori[s],v;e;e = edge[e]._nxt)
{
if(d[s] + edge[e].w > d[v = edge[e].v])
{
d[v] = d[s] + edge[e].w;
if(vis[v]) {able = 1;return;}
_SPFA(v);
if(able) return;
}
}
vis[s] = 0;
return;
}
int main()
{
n = Read(1),k = Read(1);
for(reg i = 1;i <= k;i++)
{
int sit = Read(1),u = Read(1),v = Read(1),w;
switch(sit)
{
case 1:
w = Read(1);
if(v == u&&!w) code_out
add(v,u,w);
break;
case 2:
w = Read(1);
if(v == u&&!w) code_out
add(u,v,-w);
break;
case 3:
add(u,v,0),add(v,u,0);
break;
}
}
for(reg i = 1;i <= n;i++) add(0,i,0),d[i] = -inf;
_SPFA(0);
if(!able) printf("Yes");
else printf("No");
return 0;
}
原文地址:https://www.cnblogs.com/resftlmuttmotw/p/11897048.html
- 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
- 1647: [Usaco2007 Open]Fliptile 翻格子游戏
- 1295: [SCOI2009]最长距离
- 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
- 数据结构之哈夫曼树和编码器的构造
- 1578: [Usaco2009 Feb]Stock Market 股票市场
- webp图片实践之路
- 3522: [Poi2014]Hotel
- 3299: [USACO2011 Open]Corn Maze玉米迷宫
- 2272: [Usaco2011 Feb]Cowlphabet 奶牛文字
- 1632: [Usaco2007 Feb]Lilypad Pond
- 1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
- Java设计模式(七)Decorate装饰器模式
- 1623: [Usaco2008 Open]Cow Cars 奶牛飞车
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法