3436: 小K的农场

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 2111  Solved: 986
[Submit][Status][Discuss]

Description

背景
小K是个特么喜欢玩MC的孩纸。。。
描述
小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得
一些含糊的信息(共m个),以下列三种形式描述:农场a比农场b至少多种植了c个单位的作物,农场a比农场b至多
多种植了c个单位的作物,农场a与农场b种植的作物数一样多。但是,由于小K的记忆有些偏差,所以他想要知道存
不存在一种情况,使得农场的种植作物数量与他记忆中的所有信息吻合。

Input

第一行包括两个整数n和m,分别表示农场数目和小K记忆中的信息的数目接下来m行:如果每行的第一个数是1,接
下来有三个整数a,b,c,表示农场a比农场b至少多种植了c个单位的作物如果每行第一个数是2,接下来有三个整数a
,b,c,表示农场a比农场b至多多种植了c个单位的作物如果每行第一个数是3,接下来有两个整数a,b,表示农场a
种植的数量与b一样。1<=n,m,a,b,c<=10000

Output

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

Sample Input

3 3
3 1 2
1 1 3 1
2 2 3 2

Sample Output

Yes
样例解释
三个农场种植的数量可以为(2,2,1)

HINT

Source

(注意判定条件是>N,不是大于等于。

用dis表示不等式,然后跑最短路或者最长路即可。 9520ms

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int Laxt[maxn],Next[maxn],To[maxn],Len[maxn];
int cnt,vis[maxn],num[maxn],dis[maxn],N;
void add(int u,int v,int w){
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v; Len[cnt]=w;
}
bool SPFA()
{
queue<int>q;
memset(dis,-,sizeof(dis));
dis[]=; q.push(); vis[]=; num[]++;
while(!q.empty()){
int u=q.front(); q.pop(); vis[u]=;
for(int i=Laxt[u];i;i=Next[i]){ int v=To[i];
if(dis[v]<dis[u]+Len[i]){
dis[v]=dis[u]+Len[i];
if((++num[v])>N) return false;
if(!vis[v]) vis[v]=,q.push(v);
}
}
}
return true;
}
int main()
{
int M,opt,a,b,c;
scanf("%d%d",&N,&M);
rep(i,,N) add(,i,);
rep(i,,M){
scanf("%d",&opt);
if(opt==) {
scanf("%d%d%d",&a,&b,&c);
add(b,a,c);
}
else if(opt==) {
scanf("%d%d%d",&a,&b,&c);
add(a,b,-c);
}
else {
scanf("%d%d",&a,&b);
add(a,b,); add(b,a,);
}
}
if(SPFA()) puts("Yes");
else puts("No");
return ;
}

然后优化了一下,把次数改为前者+1,而不是自加1。4452ms。 但是注意一下,CF1131D里这样是错的。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int Laxt[maxn],Next[maxn<<],To[maxn<<],Len[maxn<<];
int cnt,vis[maxn],num[maxn],dis[maxn],N;
void add(int u,int v,int w){
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v; Len[cnt]=w;
}
bool SPFA()
{
queue<int>q;
memset(dis,-,sizeof(dis));
dis[]=; q.push(); vis[]=; num[]++;
while(!q.empty()){
int u=q.front(); q.pop(); vis[u]=;
for(int i=Laxt[u];i;i=Next[i]){ int v=To[i];
if(dis[v]<dis[u]+Len[i]){
dis[v]=dis[u]+Len[i];
num[v]=num[u]+;
if(num[v]>N) return false;
if(!vis[v]) vis[v]=,q.push(v);
}
}
}
return true;
}
int main()
{
int M,opt,a,b,c;
scanf("%d%d",&N,&M);
rep(i,,N) add(,i,);
rep(i,,M){
scanf("%d",&opt);
if(opt==) {
scanf("%d%d%d",&a,&b,&c);
add(b,a,c);
}
else if(opt==) {
scanf("%d%d%d",&a,&b,&c);
add(a,b,-c);
}
else {
scanf("%d%d",&a,&b);
add(a,b,); add(b,a,);
}
}
if(SPFA()) puts("Yes");
else puts("No");
return ;
}

把queue改为stack,然后就124ms了,估计不是因为queue比stack快,而是数据使然。

(据说是改为stck变为深搜DFS了!)

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int Laxt[maxn],Next[maxn<<],To[maxn<<],Len[maxn<<];
int cnt,vis[maxn],num[maxn],dis[maxn],N;
void add(int u,int v,int w){
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v; Len[cnt]=w;
}
bool SPFA()
{
stack<int>q;
memset(dis,-,sizeof(dis));
dis[]=; q.push(); vis[]=; num[]++;
while(!q.empty()){
int u=q.top(); q.pop(); vis[u]=;
for(int i=Laxt[u];i;i=Next[i]){ int v=To[i];
if(dis[v]<dis[u]+Len[i]){
dis[v]=dis[u]+Len[i];
num[v]=num[u]+;
if(num[v]>N) return false;
if(!vis[v]) vis[v]=,q.push(v);
}
}
}
return true;
}
int main()
{
int M,opt,a,b,c;
scanf("%d%d",&N,&M);
rep(i,,N) add(,i,);
rep(i,,M){
scanf("%d",&opt);
if(opt==) {
scanf("%d%d%d",&a,&b,&c);
add(b,a,c);
}
else if(opt==) {
scanf("%d%d%d",&a,&b,&c);
add(a,b,-c);
}
else {
scanf("%d%d",&a,&b);
add(a,b,); add(b,a,);
}
}
if(SPFA()) puts("Yes");
else puts("No");
return ;
}

BZOJ3436: 小K的农场(差分约束裸题&DFS优化判环)的更多相关文章

  1. 【BZOJ3436】小K的农场 差分约束

    [BZOJ3436]小K的农场 Description 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了, ...

  2. P1993 小K的农场 && 差分约束

    首先第一篇讨论的是差分约束系统解的存在 差分约束系统是有 \(n\) 个变量及 \(m\) 个(如 \(x_{i} - x_{j} \leq a_{k}\) )关系组成的系统 差分约束解的求解可以转化 ...

  3. BZOJ 3436: 小K的农场 差分约束

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3436 题解: 裸的差分约束: 1.a>=b+c  ->  b<=a-c ...

  4. 小K的农场 差分约束

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

  5. [bzoj3436]小K的农场_差分约束

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

  6. bzoj3436小K的农场

    bzoj3436小K的农场 题意: n个数,知道m条关系:a-b≥c.a-b≤c或a==b.问是否存在满足所有关系的情况.n≤10000,m≤10000. 题解: 差分约束.因为只要求是否满足,因此最 ...

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

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

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

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

  9. BZOJ3436 小K的农场

    Description 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个 ...

随机推荐

  1. leetcode 数据库题解

    184. Department Highest Salary 题意: The Employee table holds all employees. Every employee has an Id, ...

  2. 4.8 Routing -- Specifying The URL Type

    1. 默认的路由器使用浏览器的hash来加载应用程序的开始状态并且当你移动时同步保持.目前,这依赖于浏览器中存在的hashchange事件. 2. 假设下面的路由器,输入/#/posts/new将会把 ...

  3. Java文件IO流的操作总结

    Java中的IO操作涉及到的概念及相关类很多,很容易弄混,今天特来整理总结一下,并附上一份完整的文件操作的代码. 概念解析 读和写 流就是管道,向管道里面写数据用输出流:write 从管道里面读数据, ...

  4. Python3.x:使用PyMysql连接Mysql数据库

    Python3.x:使用PyMysql连接Mysql数据库 Python3.x完全不向前兼容,导致Python2.x中可以正常使用的库,到了Python3就用不了: 比如说mysqldb,目前MySQ ...

  5. 网络安全、Web安全、渗透测试之笔经面经总结(一)

    本篇文章总结涉及以下几个方面: 对称加密非对称加密? 什么是同源策略? cookie存在哪里?可以打开吗 xss如何盗取cookie? tcp.udp的区别及tcp三次握手,syn攻击? 证书要考哪些 ...

  6. CentOS7.2 安装RabbitMQ3.6.10

    CentOS上面使用yum安装比较方便 先记录一些rabbitmq的基本操作命令: $ sudo chkconfig rabbitmq-server on # 添加开机启动RabbitMQ服务 $ s ...

  7. CentOS7.2 安装nginx-1.10.3

    nginx-1.10.3 下载nginx 检查是否安装了依赖库: [root@localhost ~]# rpm -q gcc gcc-4.8.5-11.el7.x86_64 [root@localh ...

  8. linux开启nscd服务缓存加速

    在我使用的阿里云主机上有观察到开启了一个服务nscd ,后来谷哥了下该服务的作用.了解到nscd会缓存三种服务passwd group hosts,所以它会记录三个库,分别对应源/etc/passwd ...

  9. CentOS6安装Pyhon3

    一,从官方下载Python3.6 [root@linux-node1 src]# pwd /usr/local/src [root@linux-node1 src]# wget https://www ...

  10. (转载)YOLO配置文件理解

    YOLO配置文件理解 转载自 [net] batch=64 每batch个样本更新一次参数. subdivisions=8 如果内存不够大,将batch分割为subdivisions个子batch,每 ...