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 纪念品 ...
随机推荐
- sqlmap 扫描注入漏洞
.检测是否存在漏洞: sqlmap -u .获取数据库信息: sqlmap -u --dbs .数据库表信息: sqlmap -u -D security --tables .表中字段信息 sqlma ...
- mysql区分大小写问题
- linux使用wget下载https开头url的文件
可以使用命令 : 比如我们可以修改成: wget --no-check-certificate https://我们下载文件路径 来自: http://www.laozuo.org/3648.html
- 【转】Docker网络模式--默认模式bridge模式
一 引言 当 Docker 启动时,会自动在主机上创建一个名为 docker0 虚拟网桥,这实际上就是 Linux 的一个 bridge,可以理解为一个软件交换机.它会在挂载到它的网口之间进行转发.系 ...
- 【C语言】字符数组,碎碎念
存储方法: (1)字符数组赋值 ①初始化 ]={"China'} 或 ]="China' 注意:字符串可以不加{},单字符必须加 ]={,,} ②键盘输入 () char a; ...
- python下matplotlib的subplot的多图显示位置的问题
1.说明 1.1 多图: 221,222 212 ------------附最后讲解,这下更清楚了吧,取个名字:颠倒一下--- 1.2 多图 211 223,224 ------------附最后讲解 ...
- WLC exclusionlist
Configuring Client Exclusion Configuring Client Exclusion Policies (GUI) Step 1 Choose Security &g ...
- Codeforces Round #621 (Div. 1 + Div. 2) C. Cow and Message
Bessie the cow has just intercepted a text that Farmer John sent to Burger Queen! However, Bessie is ...
- HDU1495 非常可乐(BFS/数论)
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...
- 在tomcat启动时解析xml文件,获取特定标签的属性值,并将属性值设置到静态变量里
这里以解析hibernate.cfg.xml数据库配置信息为例,运用dom4j的解析方式来解析xml文件. 1.在javaWeb工程里新建一个java类,命名为GetXmlValue.java,为xm ...