当前位置: 首页 > news >正文

中国icp备案网站网站 源文件

中国icp备案网站,网站 源文件,wordpress文章分页,制作ppt的软件电脑小 K 的农场 题目描述 小 K 在 MC 里面建立很多很多的农场,总共 n n n 个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共 m m m 个),以下列三种形式描述:…

小 K 的农场

题目描述

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

  • 农场 a a a 比农场 b b b 至少多种植了 c c c 个单位的作物;
  • 农场 a a a 比农场 b b b 至多多种植了 c c c 个单位的作物;
  • 农场 a a a 与农场 b b b 种植的作物数一样多。

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

输入格式

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

接下来 m m m 行:

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

输出格式

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

样例 #1

样例输入 #1

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

样例输出 #1

Yes

提示

对于 100 % 100\% 100% 的数据,保证 1 ≤ n , m , a , b , c ≤ 5 × 1 0 3 1 \le n,m,a,b,c \le 5 \times 10^3 1n,m,a,b,c5×103

分析

差分约束模型,把每个都分析一下:

  1. 农场 a a a 比农场 b b b 至少多种植了 c c c 个单位的作物: x a − c ≥ x b x_a-c \ge x_b xacxb,构成(a,b,-c)
  2. 农场 a a a 比农场 b b b 至多多种植了 c c c 个单位的作物: x b + c ≥ x a x_b+c \ge x_a xb+cxa,构成(b,a,c)
  3. 农场 a a a 与农场 b b b 种植的作物数一样多: x a = x b → x a ≥ x b , x b ≥ x a x_a=x_b \to x_a \ge x_b,x_b \ge x_a xa=xbxaxb,xbxa,构成(a,b,0),(b,a,0)

代码

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e8+5,M=1e6;
vector<pair<int,int> > edges[M];
int dis[M];
int n,m,s;
int cnt[M];
bool inQueue[MAXN];
int q[MAXN],f=1,t=1;
void add(int u,int v,int w){edges[u].emplace_back(v,w);}
void read(){cin>>n>>m;for(int i=1,u,v,w,opt;i<=m;i++) {cin>>opt>>u>>v;if(opt<3) cin>>w;if(opt==1) add(u,v,-w);if(opt==2) add(v,u,w);if(opt==3) {add(u,v,0);add(v,u,0);} }
}
bool spfa(int s=0)
{memset(dis,0x3f,sizeof(dis));dis[s]=0;q[t++]=s;inQueue[s]=true;while(f<t){int x=q[f++];inQueue[x]=false;for(auto& edge:edges[x]){if(dis[edge.first]<=dis[x]+edge.second) continue;dis[edge.first]=dis[x]+edge.second;if(!inQueue[edge.first]){q[t++]=edge.first;inQueue[edge.first]=true;cnt[edge.first]++;if(cnt[edge.first]>=n+1) return false;}}}return true;
}
void solve(){for(int i=1;i<=n;i++) add(0,i,0);if(!spfa()) cout<<"No"; else cout<<"Yes";
}
int main()
{read();solve();return 0;
}

分析

1.超级源点
void solve(){for(int i=1;i<=n;i++) add(0,i,0);if(!spfa()) cout<<"No"; else cout<<"Yes";
}

差分约束需要超级源点,需要与每个点构成一条边,权值为0,因为spfa可以有效判断负环,if(cnt[edge.first]>=n+1) return false;需要注意,此处为n+1,因为有超级源点

2.效率问题

STL库中的queue效率低下,常数较高,在不开O2的前提下容易tle,推荐手打队:

  1. q.push(x) → \to q[tail++]=x;
  2. q.pop() → \to head++;
  3. q.top() → \to q[head]
http://www.yayakq.cn/news/331948/

相关文章:

  • 做网站编程有钱途么企业怎么做网络推广
  • 网站什么做才会更吸引客户北京知名企业100强
  • 网站不收录原因电子商务网站设计规划书
  • 俄语网站建设公司网站开发后端选择
  • 网站开发的开发意义淘宝做推广网站
  • 网站专业好找工作吗邢台网站设计厂家
  • 罗湖网站设计开发招远网站定制
  • asp做的手机网站上海公司车辆怎么查询违章
  • 家居东莞网站建设福建网站开发公司
  • 自己做的视频网站如何赚钱记事本网页制作教程
  • 书法网站模板下载网红营销的优势与劣势
  • 科技局网站查新怎么做苏州网信信息科技股份有限公司
  • 营销型网站策划书湛江网站模
  • 中国建设银行网站首页签约陕西省医院网站建设管理
  • 网站开发什么叫前端后端提供石家庄网站推广
  • 织梦 一键更新后网站空白网站 系统概述
  • 沈阳网站建设 龙兴科技中山做网站公司
  • 自己站网站wordpress首页阅读全文
  • 中兴建设有限公司网站集团网站制作方案ppt
  • 科技公司网站模版如何查询网站被百度收录
  • 云南网络公司网站建设一个空间怎么放2个网站
  • 炉火建站wordpress 导出数据库
  • 定制商品的网站建设各类软件代理加盟
  • 怎么用frontpage做网站网络平台制作软件教程
  • 用php做网站需要什么wordpress 管理菜单
  • 为企业为什么做网站做钓鱼网站教程
  • 网站建设公司财务预算凡科互动投票破解
  • 办个网站需要多少钱曹县 做网站的公司
  • 网络课程网站模板室内设计师之路网站
  • 三合一网站建设什么意思乐享黔程是什么公司