CSP-J2019 加工零件
Background:
之前 $noip $死了,泥萌都说 \(noip SPFA\) 了,现在 \(noip\) 复活了,所以 \(SPFA\) 也复活了。
(注:这里的 \(noip\) 跟 \(lxl\) 没有任何关系qwq
Description:
简化版题意:
给出无向图,\(q\) 次询问,每次给定 \(A_i, L_i\) ,设 \(dis_x\) 表示点 \(x\) 与 \(1\) 号点的距离,求 \(dis_{A_i}\) 是否与 \(dis_{L_i}\) 奇偶性相同且 \(dis_{A_i}\le dis_{L_i}\)。
Solution:
分奇偶求最短路,单次询问只要 \(O(1)\) 判断就好了
然后考虑到 \(NOI 2019 D1T1\) 的教训毅然决然的用了 \(SPFA\)
\(SPFA\) 的复杂度是 \(O(kE)\),\(q\) 次询问复杂度 \(O(q)\),总复杂度大概是 \(O(kE+q)\) (?)
Code:
#include<bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const int N = 1e5+1;
int n,m,qq;
struct edge
{
int nxt;
int to;
int len;
}e[N*2];
int h[N*2],cnt;
int dis1[N],dis2[N]; //dis1[i]%2==1,dis2[i]%2==0
int vis1[N],vis2[N];
queue<int> q;
void add(int u,int v)
{
e[++cnt].nxt=h[u];
e[cnt].to=v;
e[cnt].len=1;
h[u]=cnt;
}
void SPFA()
{
memset(dis1,0x3f,sizeof(dis1));
memset(dis2,0x3f,sizeof(dis2));
dis2[1]=0;
q.push(1);
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=h[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(dis1[u]+1<dis2[v]||dis2[u]+1<dis1[v])
{q.push(v);}
if(dis1[u]+1<dis2[v])
dis2[v]=dis1[u]+1;
if(dis2[u]+1<dis1[v])
dis1[v]=dis2[u]+1;
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&qq);
for(int i=1;i<=m;++i)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v);add(v,u);
}
SPFA();
for(int i=1;i<=qq;++i)
{
int ai,li;
scanf("%d%d",&ai,&li);
if(li%2==1)
{
if(dis1[ai]<=li) printf("Yes\n");
else printf("No\n");
}
else if(li%2==0)
{
if(dis2[ai]<=li) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
CSP-J2019 加工零件的更多相关文章
- P5663 加工零件
P5663 加工零件 题解 暴力搜索 搜索显然会TLE #include<iostream> #include<cstdio> #include<cstdlib> ...
- 洛谷 P5663 加工零件
题目传送门 解题思路: 最暴力的做法: bfs模拟,每次将一个阶段的所有点拿出来,将其所有直连的点都放进队列,知道本阶段结束,最后看1号点会不会在最后一个阶段被放入队列.(洛谷数据40分) 优化了一下 ...
- 2019CSP-J T4 加工零件
题目描述 凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇.工厂里有 n 位工人,工人们从 1 ∼n 编号.某些工人之间存在双向的零件传送带.保证每两名工人之间最多只存在一 ...
- 题解 P5663 【加工零件【民间数据】】
博客园体验更佳 讲讲我的做法 确定做法 首先,看到这道题,我直接想到的是递归,于是复杂度就上天了,考虑最短路. 如何用最短路 首先,看一张图 我们该如何解决问题? 问题:\(3\)做\(5\)阶段的零 ...
- 洛谷 P5663 加工零件 & [NOIP2019普及组] (奇偶最短路)
传送门 解题思路 很容易想到用最短路来解决这一道问题(题解法),因为两个点之间可以互相无限走,所以如果到某个点的最短路是x,那么x+2,x+4也一定能够达到. 但是如何保证这是正确的呢?比如说到某个点 ...
- 题解 CSP2019-J2T4【加工零件】
这题我们要求的是啥呢?仔细读题可以发现,工人传送带的关系可以看成一个 \(n\) 个点和 \(m\) 条边的无向图,然后对于每组询问 \((a,L)\),其实就是问: \(1\) 到 \(a\) 有没 ...
- P5663 加工零件 题解
原题链接 简要题意: 给定一个图,每次询问从 \(x\) 节点开始,\(y\) 步能不能达到 \(1\) 号节点. 算法一 这也是我本人考场算法.就是 深搜 . 因为你会发现,如果 \(x\) 用 \ ...
- 基础篇:3.2)规范化:3d零件建模
本章目的:规范化零件建模,这是机械的基本功夫. 1.建模的总体原则和总体要求 1.1 建模总体原则 a)零件模型应能准确表达零件的设计信息:b)零件模型包含零件的几何要素.约束要素和工程要素:c)零件 ...
- 【游记】CSP J/S 2019 游记
J 组 \(2:30\)开始, \(2:13\)还在酒店的我看了看手表...飞奔考场. T1 数字游戏 秒切. 下午某中学某大佬说可用线性基(%) T2 公交换乘 用单调队列思想,秒切. T3 纪念品 ...
随机推荐
- js实现上移下移
直接上代码 //上移 var $up = $(".up") $up.click(function () { var $tr = $(this).parents("tr&q ...
- 阿里云服务器-2.使用putty连接
1.下载PuTTY 进入官网 点击我跳转 点击here 看自己电脑是多少位选择下载 2.安装 一直点击下一步就行 这里可以选择也可以不选择,这会在创建桌面快捷文件 看图注意事项 这里也可以用密匙,先去 ...
- Django框架之ORM常用字段
一.ORM介绍 1.ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过 ...
- spring 基于xml的申明式AspectH中的后置通知的返回值获取
spring 基于xml的申明式AspectH中的后置通知的返回值获取 1. 配置文件 <aop:config> <aop:aspect ref="myAspect&quo ...
- SPRING MICROSERVICES IN ACTION
What is microservice 背景 在微服务的概念成型之前,绝大部分基于WEB的应用都是使用单体的风格来进行构建的.在单体架构中,应用程序作为单个可部署的软件制品交付,所有的UI(用户接口 ...
- C语言与汇编的嵌入式编程:main中模拟函数的调用(两数交换)
编写一个两数交换函数swap,具体代码如下: #include<stdio.h> void swap(int *p1,int *p2) { int temp; temp = *p1; *p ...
- 11: Django + gunicorn + Nginx 的生产环境部署
1.1 gunicorn介绍 1.Gunicorn 1. Gunicorn是使用Python实现的WSGI服务器, 直接提供了http服务, 并且在woker上提供了多种选择, gevent, e ...
- redhat7.6 配置主从DNS
主DNS配置include指向的配置文件 /etc/named.rfc1912.zone 下面图片配置内容/etc/named.rfc1912.zones 从DNS配置 /etc/named.conf ...
- 「JSOI2013」贪心的导游
「JSOI2013」贪心的导游 传送门 多次询问区间内%一个数的最大值 我们不妨设这个数为M_sea 值域比较小所以考虑分块维护. 我们观察到对于给定的一个 \(p\) ,函数 \(y = x \% ...
- 【兆易创新RISC-V开发板评测】01.干货分享
背景介绍:2019年12月19日在面板包偶然发可以免费申请测评GD32VF103开发板,欣喜万分:在这之前各大技术论坛说是已经有国产兆易创新的RISCV指令集的MCU发布的事情,一时间摩拳擦掌想购入一 ...