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

CSP 2019 第四题: 加工零件

题目链接
题目:
在这里插入图片描述

知识点:
图、最短路径、bfs
思路:

  • 先都读懂题,题目的零件加工是需要相邻点的参与,除非不加工,否则相邻的一定会提供零件
  • 题目要求的是某个节点产某个阶段的零件,问第一个节点需不需要提供零件(原材料)。不难看出,这是和路径相关的题目,节点N 要生产第L阶段的零件需要节点1提供零件,那么N到第一个节点的路径至少为L-1,这是直观看出来的,但实际上,要使得该节点到第一个节点的路径最小,我们得求出最短路径,也就是BFS,当L比路径大时,在节点1和N之前肯定会多出2的倍数的路径(在两个节点之间可以多生产几个阶段),因此只要加工的阶段L==最短路径+2n即可,具体在哪些节点多生产几次可以不关心,当最短路径为奇数,+2n后依旧是奇数,反之则是偶数
  • 以第四个节点生产L5阶段为例子,路径为3,L5则是在第一阶段和第二阶段多生产一次即可。因此最短路径是奇数,L就必须要求是大于等于最短路径的奇数,反之,最短路径是偶数,则L必须是大于等于最短路径的偶数

在这里插入图片描述

数据约束:
数据无特别约束,bfs时间复杂度为O(n),无超时
代码参考:

  • 由于储存图的的数据关系时为了方便遍历用邻接矩阵,矩阵设为动态数组为了方便储存邻接关系,如果时静态二维数组就还得多遍历几次
  • 写完才发现代码有点冗长,处理就奇偶的最短路径时,数组可以用二维数组,a[1][]存偶,奇存a[][1],这样判断时直接用a[][y%2]即可,不用多些几个判断
  • 最短路径除了BFS还有 Dijkstra、SPFA等,但是对于无权值的最短路径,BFS也就足够用了
//建图,利用bfs找出最短的技术路径和偶数路径(也可以spfa和jst)
#include<bits/stdc++.h>
#define MAX_N 200005
using namespace std;
int n,m,l;
vector<int> v[MAX_N];
struct stu{int k,dis;//记录点和到该点的距离 stu(int x=0,int l=0) : k(x),dis(l){};//设置初始化 默认为0 
}; 
queue <stu> q; 
int even[MAX_N],odd[MAX_N];//分别储存奇偶路径 
void bfs();
int main(){cin>>n>>m>>l; //n个工人,m条数  ,l个数据 int x,y;for(int i=1;i<=m;i++){cin>>x>>y;v[x].push_back(y),v[y].push_back(x);  //邻接表储存结果 }bfs();for(int i=1;i<=l;i++){cin>>x>>y;  if(y%2==0){if(odd[x]<=y&&odd[x]!=-1){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;} }else{even[x]<=y&even[x]!=-1 ? cout<<"Yes"<<endl : 	cout<<"No"<<endl;}} return 0;
}
void bfs(){memset(odd,-1,sizeof(odd));memset(even,-1,sizeof(even));//每次进来初始化节点情况q.push(stu(1,0)); //第一个数据入队 while(!q.empty()){stu now = q.front();q.pop();int x = now.k;//vector数组长度也可以是 for(int p =0;p<(int) v[x].size();p++){ //遍历该行的邻接表(相邻节点) int y= v[x][p];int  num = now.dis+1;//如果没被访问过就直接更新否则退出 if(num%2==0){//偶数 if(odd[y] != -1) continue;else odd[y] = num;}else{if(even[y]!=-1) continue;else even[y] = num;}
//			 cout<<"bfs:"<<y<<": "<<num<<endl;q.push(stu(y,num));}}} 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 量产工具——复习及改进(后附百问网课程视频链接)
  • 数字信号处理2: 离散信号与系统的频谱分析
  • 解决客户访问超时1s问题
  • C#如何对某个词在字符串中出现的次数进⾏计数(LINQ)
  • YOLOX修改检测框、标签文字的粗细大小
  • 产业链分析指南:产业链分析的七个步骤!
  • <数据集>电梯内人车识别数据集<目标检测>
  • 14. 计算机网络HTTPS协议(二)
  • LLM - 理解 主流大模型 LLM 都使用 Decoder Only 架构的原因 (总结8点)
  • MQTT服务器-安装篇(阿里云主机)
  • 使用 Arduino 串行绘图仪可视化实时数据
  • 在Fragment中显示高德地图
  • 多叉树的深度优先遍历(以电话号码的字母组合为例)
  • MySQL——数据库的操作,数据类型,表的操作
  • 卷积神经网络 - 高效的卷积算法篇
  • 【RocksDB】TransactionDB源码分析
  • Docker容器管理
  • Git同步原始仓库到Fork仓库中
  • IndexedDB
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • LeetCode算法系列_0891_子序列宽度之和
  • SpringCloud集成分布式事务LCN (一)
  • Spring框架之我见(三)——IOC、AOP
  • 当SetTimeout遇到了字符串
  • 订阅Forge Viewer所有的事件
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 区块链将重新定义世界
  • 如何实现 font-size 的响应式
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 一个完整Java Web项目背后的密码
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 【云吞铺子】性能抖动剖析(二)
  • ​MySQL主从复制一致性检测
  • ​人工智能书单(数学基础篇)
  • #Lua:Lua调用C++生成的DLL库
  • (13):Silverlight 2 数据与通信之WebRequest
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .gitignore文件使用
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 常见的偏门问题
  • .net访问oracle数据库性能问题
  • .net解析传过来的xml_DOM4J解析XML文件