洛谷 P1993 小K的农场 解题报告

时间:2023-01-12 07:39:30

P1993 小K的农场

题目描述

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

农场a比农场b至少多种植了c个单位的作物,

农场a比农场b至多多种植了c个单位的作物,

农场a与农场b种植的作物数一样多。

但是,由于小K的记忆有些偏差,所以他想要知道存不存在一种情况,使得农场的种植作物数量与他记忆中的所有信息吻合。

输入输出格式

输入格式:

第一行包括两个整数 n 和 m,分别表示农场数目和小 K 记忆中的信息数目。

接下来 m 行:

如果每行的第一个数是 1,接下来有 3 个整数 a,b,c,表示农场 a 比农场 b 至少多种植了 c 个单位的作物。

如果每行的第一个数是 2,接下来有 3 个整数 a,b,c,表示农场 a 比农场 b 至多多种植了 c 个单位的作物。如果每行的第一个数是 3,接下来有 2 个整数 a,b,表示农场 a 种植的的数量和 b 一样多。

输出格式:

如果存在某种情况与小 K 的记忆吻合,输出“Yes”,否则输出“No”。

说明

对于 100% 的数据保证:1 ≤ n,m,a,b,c ≤ 10000。


熟悉差分约束的话应该一眼就能看出来。

对“至少”正向连负边,对“至多”负向连正边,判断有没有负环即可。

不过这个题跑BFS_SPFA会TLE,得用DFS_SPFA,值得一题的是,两者判负环的方式并不一样。

BFS_SPFA是判断一个点是否入队n次,而DFS_SPFA则判断一个点是否在一条链上出现多次。

其实大部分情况来说,还是写BFS的比较稳,DFS的效率不太稳定。


Code:(其实有个细节问题没判居然还过了)

#include <cstdio>
#include <cstring>
#include <cstdlib>
#define rg register
using namespace std;
const int N=10002;
int n,m,dis[N],used[N];
int head[N],edge[N<<1],next[N<<1],to[N<<1],cnt=0,in[N];
void add(rg int u,rg int v,rg int w)
{
edge[++cnt]=w;next[cnt]=head[u];to[cnt]=v;head[u]=cnt;
}
int read()
{
rg int x=0;char c;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') {x=(x<<3)+(x<<1)+c-'0';c=getchar();}
return x;
}
void dfs(int u)
{
used[u]=1;
for(rg int i=head[u];i;i=next[i])
{
rg int v=to[i],w=edge[i];
if(dis[v]>dis[u]+w)
{
if(used[v])
{
printf("No\n");
exit(0);
}
dis[v]=dis[u]+w;
dfs(v);
}
}
used[u]=0;
}
int main()
{
freopen("test_data.in","r",stdin);
rg int u,v,w,typ;
n=read();m=read();
for(int i=1;i<=m;i++)
{
rg int typ=read();
if(typ==1)
{
u=read(),v=read(),w=read();
add(u,v,-w);
in[v]++;
}
else if(typ==2)
{
u=read(),v=read(),w=read();
add(v,u,w);
in[u]++;
}
else
{
u=read(),v=read();
add(u,v,0),add(v,u,0);
in[u]++,in[v]++;
}
}
for(rg int i=1;i<=n;i++)
if(!in[i])
add(0,i,0);
memset(dis,0x3f,sizeof(dis));
dis[0]=0;
dfs(0);
printf("Yes\n");
return 0;
}

2018.6.22

洛谷 P1993 小K的农场 解题报告的更多相关文章

  1. 洛谷 P1993 小K的农场

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

  2. 洛谷P1993 小K的农场 &lbrack;差分约束系统&rsqb;

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

  3. 洛谷P1993 小 K 的农场

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

  4. 『题解』洛谷P1993 小K的农场

    更好的阅读体验 Portal Portal1: Luogu Description 小\(K\)在\(\mathrm MC\)里面建立很多很多的农场,总共\(n\)个,以至于他自己都忘记了每个农场中种 ...

  5. 洛谷P1993 小K的农场

    思路是差分约束+dfs版SPFA. 首先来思考差分约束的过程,将题目给出的式子进行转化: 农场a比农场b至少多种植了c个单位的作物, SPFA我们考虑跑最短路,那么要让SPFA中满足的式子就是if(d ...

  6. 洛谷P1993 小 K 的农场(查分约束)

    /* 加深一下对查分约束的理解 建图的时候为了保证所有点联通 虚拟一个点 它与所有点相连 权值为0 然后跑SPFA判负环 这题好像要写dfs的SPFA 要不超时 比较懒 改了改重复进队的条件~ */ ...

  7. 洛谷 P1993 小K的农场 题解

    每日一题 day55 打卡 Analysis 这是我们一次考试的T1,但我忘了差分约束系统怎么写了,所以就直接输出Yes混了60分 首先转化题目: 1:表示农场 a 比农场 b 至少多种植了 c 个单 ...

  8. 题解—— 洛谷 p1993 小K的农场(差分约束&amp&semi;负环判断)

    看到题就可以想到差分约束 判断负环要用dfs,bfs-spfa会TLE 4个点 bfs-spfa #include <cstdio> #include <algorithm> ...

  9. 洛谷P1993 小K的农场&lowbar;差分约束&lowbar;dfs跑SPFA

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

随机推荐

  1. HDU4651&plus;数学公式

    见Goolgle http://zh.wikipedia.org/zh-cn/%E6%95%B4%E6%95%B8%E5%88%86%E6%8B%86 /* 数学公式 ans[i]:i可以有ans[i ...

  2. 07-2&period; A&plus;B和C &lpar;15&rpar;

    给定区间[-231, 231]内的3个整数A.B和C,请判断A+B是否大于C. 输入格式: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每组占一行,顺序给出A.B ...

  3. 工作学习笔记——GDI泄露检测利器

    用.Net写的地图编辑器,最近在一个长时间使用的策划手里频繁挂掉.定位到原因应该是GDI泄露.但在几千行代码里手工寻找泄漏点实在是有些困难,直到在网上找到了这个检测GDI泄露的工具GDILeaks.它 ...

  4. Go语言如何判断一个chan被关闭

    当一个chanel被关闭后,再取出不会阻塞,而是返回零值 package main import "fmt" func main() { c := make(chan int, 5 ...

  5. 腾讯云ping wget yum 常用命令设置问题

    遇到ping wget yum 命令不能正常使用的情况是因为腾讯云有些配置: root执行如下即可: wget -q http://mirrors.tencentyun.com/install/sof ...

  6. jQuery Mobile的默认配置项具体解释&comma;jQuery Mobile的中文配置api&comma;jQuery Mobile的配置说明&comma;配置大全

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xmt1139057136/article/details/35258199 学习jQuery Mob ...

  7. ctags的如何生成tags文件

    tags 在使用vim编程和浏览代码是非常有用.可以用CTRL+]和CTRL+t 来回跳转关键字.先生成自己工作目录的tags.最简单粗暴用法: $cd yourwork $ctags -R * 这样 ...

  8. MsDepSvc 启动失败

    MsDepSvc 使用80端口,用于 Microsoft Web Deploy 3.6 的远程代理服务. 如果80端口被占用,则启动失败.我的是被phpstudy软件占用,所以启动失败.

  9. ORB-SLAM(十二)优化

    ORB-SLAM中优化使用g2o库,先复习一下g2o的用法,上类图 其中SparseOptimizer就是我们需要维护的优化求解器,他是一个优化图,也是一个超图(包含若干顶点和一元二元多元边),怎样定 ...

  10. 接口调试,HttpWebRequest和HttpWebResponse使用,接口回调处理

    public void queryIdCardSelects { string url=“jiekoudizhi.html”; string param="jiekoucanshu&quot ...