洛谷 P1993 小K的农场 题解
每日一题 day55 打卡
Analysis
这是我们一次考试的T1,但我忘了差分约束系统怎么写了,所以就直接输出Yes混了60分
首先转化题目:
1:表示农场 a 比农场 b 至少多种植了 c 个单位的作物。即a>=b+c 转化后为 b-a<=-c
2:表示农场 a 比农场 b 至多多种植了 c 个单位的作物。即a<=b+c 转化后为 a-b<=c
3:表示农场 a 与农场 b 种植数一样 即a=b 可以表示为 a-b<=0 与 b-a<=0
接下来就是判负环了 而为什么是判负环呢? 因为由题意可得 a>b且b>a一定是不合法的(即情况1的矛盾)而正环、正+负环、以及中间穿插0的情况都是合法的(脑补即可)
至于情况3我觉得是影响不大的 甚至会更容易理解,因为不是更优就不会选这条路。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 10010
#define rep(i,s,e) for(register int i=s;i<=e;++i)
#define dwn(i,s,e) for(register int i=s;i>=e;--i)
using namespace std;
inline int read()
{
int x=,f=;
char c=getchar();
while(c<''||c>'') {if(c=='-') f=-; c=getchar();}
while(c>=''&&c<='') {x=x*+c-''; c=getchar();}
return f*x;
}
int n,m,cnt;
int head[maxn],book[maxn],dis[maxn];
struct node
{
int v,w,nex;
}edge[*maxn];
inline int add(int x,int y,int z)
{
edge[++cnt].v=y;
edge[cnt].w=z;
edge[cnt].nex=head[x];
head[x]=cnt;
}
bool SPFA(int from)
{
book[from]=;
for(int i=head[from];i;i=edge[i].nex)
{
int to=edge[i].v,val=edge[i].w;
if(dis[to]>dis[from]+val)
{
dis[to]=dis[from]+val;
if(book[to]==true) return false;
if(SPFA(to)==false) return false;
}
}
book[from]=;
return true;
}
int main()
{
memset(dis,,sizeof(dis));
n=read();m=read();
rep(i,,m)
{
int in=read();
if(in==)
{
int a=read(),b=read(),c=read();
add(a,b,-c);
}
else if(in==)
{
int a=read(),b=read(),c=read();
add(b,a,c);
}
else if(in==)
{
int a=read(),b=read();
add(a,b,);
add(b,a,);
}
}
rep(i,,n) add(n+,i,);
dis[n+]=;
if(SPFA(n+)==true) printf("Yes");
else printf("No");
return ;
}
请各位大佬斧正(反正我不认识斧正是什么意思)
洛谷 P1993 小K的农场 题解的更多相关文章
- 洛谷 P1993 小K的农场 解题报告
P1993 小K的农场 题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b ...
- 洛谷 P1993 小K的农场
P1993 小K的农场 题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b ...
- 洛谷P1993 小K的农场 [差分约束系统]
题目传送门 小K的农场 题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b ...
- 『题解』洛谷P1993 小K的农场
更好的阅读体验 Portal Portal1: Luogu Description 小\(K\)在\(\mathrm MC\)里面建立很多很多的农场,总共\(n\)个,以至于他自己都忘记了每个农场中种 ...
- 洛谷P1993 小 K 的农场
题目描述 小 K 在 Minecraft 里面建立很多很多的农场,总共 n 个,以至于他自己都忘记了每个 农场中种植作物的具体数量了,他只记得一些含糊的信息(共 m 个),以下列三种形式描 述: 农场 ...
- 题解—— 洛谷 p1993 小K的农场(差分约束&负环判断)
看到题就可以想到差分约束 判断负环要用dfs,bfs-spfa会TLE 4个点 bfs-spfa #include <cstdio> #include <algorithm> ...
- 洛谷P1993 小K的农场
思路是差分约束+dfs版SPFA. 首先来思考差分约束的过程,将题目给出的式子进行转化: 农场a比农场b至少多种植了c个单位的作物, SPFA我们考虑跑最短路,那么要让SPFA中满足的式子就是if(d ...
- 洛谷P1993 小 K 的农场(查分约束)
/* 加深一下对查分约束的理解 建图的时候为了保证所有点联通 虚拟一个点 它与所有点相连 权值为0 然后跑SPFA判负环 这题好像要写dfs的SPFA 要不超时 比较懒 改了改重复进队的条件~ */ ...
- 洛谷P1993 小K的农场_差分约束_dfs跑SPFA
Code: #include<cstdio> #include<queue> using namespace std; const int N=10000+233; const ...
随机推荐
- 【转】Mac入门(一)基本用法
我前五年一直外包到微软,每天使用的都是Windows系统和.NET. 2012年加入VMware, 公司的工作机是台Mac 笔记本(MacBook Pro), 所以有机会接触Mac系统 Mac和Wi ...
- Jenkins教程(四)安装BlueOcean与Maven构建
前言 本文旨在使用BlueOcean实现构建可视化与使用Maven构建上一节Jenkins教程(三)添加凭据与流水线拉取Git代码拉下来的代码 什么是Blue Ocean Blue Ocean 重新思 ...
- drools规则语法(一)
1.基本的匹配规则 1.1变量 drools使用匹配的方式对Fact进行比对, 比如 account : Account(balance > 100) 这个规则的含义就是在Fact中找到类型为A ...
- DRF的APIView、GenericAPIView、GenericViewSet的原理分析
一.层次结构 GenericViewSet(ViewSetMixin, generics.GenericAPIView) ---DRF GenericAPIView(views.APIView) -- ...
- 剑指Offer 总结
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. public class Solution { public ListNode EntryNodeOfLoop(ListNo ...
- Python面向对象之私有属性和私有方法
01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私有方法 就是 对象 ...
- 【转】 python_控制台输出带颜色的文字方法
在python开发的过程中,经常会遇到需要打印各种信息.海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性.这时候,如果能给重要的信息加上字体颜色,那么就会更加方便用户阅读了. ...
- Python删除列表元素的3种方法
之前看教程的时候比较着急,对这些基础掌握不好,过来回顾一下 使用del语句删除 lis = [1, 2, 3, 'a', 'b'] print(lis) del lis[0] print(lis) 输 ...
- 《JavaScript高级程序设计》笔记:高级技巧
高级函数 安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串.每个类在内部都有一个[[Cla ...
- PL/SQL 出现死锁解决办法
转自:https://blog.csdn.net/u013015629/article/details/48005763 在PL/SQL中操作数据表时,长时间没反应,并且编辑某个表中数据时,出现“re ...