小K的农场 bzoj-3436

题目大意:给定n个点,每个节点有一个未知权值。现在有m个限制条件,形如:点i比点j至少大c,点i比点j至多大c或点i和点j相等。问是否可以通过给所有点赋值满足所有限制条件。

注释:$1\le n,m\le 10^4$。


想法:差分约束裸题。

我们将限制条件转化一下:

$val_i-val_j>c$

$\Leftrightarrow val_i>val_j+c$;

我们就从j到i连一条权值为c的边。

$val_i-val_j<c$

$\Leftrightarrow val_j>val_i-c$;

我们就从i到j连一条权值为-c的边。

相等的话直接连两条权值为0的边

跑spfa求最长路,判断有没有正环即可。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define N 10010
using namespace std;
queue<int>q;
int n,m;
int to[N<<2],nxt[N<<2],val[N<<2],head[N<<1],tot;
int dis[N],tim[N]; bool vis[N];
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
inline void add(int x,int y,int z) {to[++tot]=y; val[tot]=z; nxt[tot]=head[x]; head[x]=tot;}
bool spfa()
{
while(!q.empty()) q.pop(); memset(dis,0x3f,sizeof dis); dis[0]=0; q.push(0); vis[0]=true;
while(!q.empty())
{
int x=q.front(); q.pop(); vis[x]=false; for(int i=head[x];i;i=nxt[i]) if(dis[to[i]]>dis[x]+val[i])
{
dis[to[i]]=dis[x]+val[i];
if(!vis[to[i]])
{
vis[to[i]]=true; q.push(to[i]);
tim[to[i]]=tim[x]+1;
if(tim[to[i]]>n) return false;
}
}
}
return true;
}
int main()
{
int opt,x,y,z;
n=rd(),m=rd(); for(int i=1;i<=m;i++)
{
opt=rd();
if(opt==1) {x=rd(),y=rd(),z=rd(),add(x,y,-z);}
else if(opt==2) {x=rd(),y=rd(),z=rd(),add(y,x,z);}
else {x=rd(),y=rd(),add(x,y,0),add(y,x,0);}
}
for(int i=1;i<=n;i++) add(0,i,0);
if(spfa()) puts("Yes");
else puts("No");
return 0;
}

小结:差分约束还是比较有意思的/xyx

[bzoj3436]小K的农场_差分约束的更多相关文章

  1. BZOJ_3436_小K的农场_差分约束

    BZOJ_3436_小K的农场_差分约束 题意: 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个),以下列三种形式描述 ...

  2. bzoj3436: 小K的农场(差分约束)

    3436: 小K的农场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1575  Solved: 690[Submit][Status][Discus ...

  3. BZOJ3436: 小K的农场(差分约束裸题&DFS优化判环)

    3436: 小K的农场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2111  Solved: 986[Submit][Status][Discus ...

  4. bzoj3436: 小K的农场(差分约束)

    3436: 小K的农场 题目:传送门 题解: 查分基础: t==1  a>=b+c t==2  b>=a-c t==3  a>=b+0 b>=a+0 跑最长路一A 代码: #i ...

  5. 洛谷P1993 小K的农场_差分约束_dfs跑SPFA

    Code: #include<cstdio> #include<queue> using namespace std; const int N=10000+233; const ...

  6. 【BZOJ3436】小K的农场(差分约束)

    [BZOJ3436]小K的农场(差分约束) 题面 由于BZOJ巨慢无比,使用洛谷美滋滋 题解 傻逼差分约束题, 您要是不知道什么是差分约束 您就可以按下\(Ctrl+W\)了 #include< ...

  7. P1993 小K的农场(差分约束)

    小K的农场 题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b至少多种植了 ...

  8. 小K的农场(差分约束,spfa)

    题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b至少多种植了c个单位的作 ...

  9. 小K的农场(差分约束)

    题目大意 n个点 m条描述 农场 a 比农场 b 至少多种植了 c 个单位的作物. 农场 a 比农场 b 至多多种植了 c 个单位的作物. 农场 a 与农场 b 种植的作物数一样多. 题解 差分约束裸 ...

随机推荐

  1. mac系统 usr/ 目录下无法新建文件夹???

    这个问题是在操作mongodb的时候遇到的,很苦恼.目前已经解决,将解决方法分享给各位遇到同样问题的你们. 1.重启电脑,开始关机就立马按住command+R,进入macOS恢复功能界面,进入的时间可 ...

  2. R Programming week 3-Loop functions

    Looping on the Command Line Writing for, while loops is useful when programming but not particularly ...

  3. 1.了解Objective-C语言

    了解Objective-C语言 ** Objective-C 语言是"消息结构"(messaging structure) 类似C++ .Java 是"函数调用" ...

  4. echarts 外观效果修改

    <!DOCTYPE html> <html> <head> <title></title> <link rel="style ...

  5. Beta冲刺提交-星期五

    Beta冲刺提交-星期五 这个作业属于哪个课程 软件工程 这个作业要求在哪里 <作业要求的链接> 团队名称 唱跳RAP编程 这个作业的目标 1.进行每日例会,每个成员汇报自己今天完成    ...

  6. 查看外网IP

    同一个网络,登录不同网站/APP, 显示的登录IP可能不一样. 输入ip138.com 得到外网IP: 输入:http://www.net.cn/static/customercare/yourip. ...

  7. jquery的$().each,$.each的区别02

    在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法.两个方法是有区别的,从而这两个方法在针对不同的操作上,显示了各自的特点. $().each,对于这个方法,在d ...

  8. 浅谈FFT(快速博立叶变换)&学习笔记

    0XFF---FFT是啥? FFT是一种DFT的高效算法,称为快速傅立叶变换(fast Fourier transform),它根据离散傅氏变换的奇.偶.虚.实等 特性,对离散傅立叶变换的算法进行改进 ...

  9. 笔试算法题(34):从数字序列中寻找仅出现一次的数字 & 最大公约数(GCD)问题

    出题:给定一个数字序列,其中每个数字最多出现两次,只有一个数字仅出现了一次,如何快速找出其中仅出现了一次的数字: 分析: 由于知道一个数字异或操作它本身(X^X=0)都为0,而任何数字异或操作0都为它 ...

  10. [Python3网络爬虫开发实战] 7.2-Splash的使用

    Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库.利用它,我们同样可以实现动态渲染页面的抓取. 1. 功能介 ...