加工零件:非常好的一道图论题。CCF 普及组的题目大概也只有图论出的比较巧妙了。

题意简述:给你一张无向图,\(q\) 次询问,判断是否存在一条从 \(a\) 到 \(1\) 且长度为 \(L\) 的路径。

看到 \(L\) 很大,我们立刻想到了要撇开 \(L\) 的限制思考问题。

首先,对于一条路径,我们肯定能找到从 \(1\) 到 \(v\) 的一条最短路径,它的长度为 \(s\)。

此时我们可以发现,这时候我们一定可以找到长度为 \(s,s+2,s+4,...,s+2k\) 的路径。

为什么?因为这张图是无向图,我们可以沿着一条边走,来回一趟,这样我们的时间就会增加 \(2\) 了。

那么假设我们要 \(s+1,s+3,...,s+2k+1\) 的长度怎么办?我们只需要找到一个长度为 \(s+2k+1\) 的最短路径即可,这样长度为 \(s+2k+1+2j\) 的路径就都能找到。

这就启发我们把一个点分为此时时间为奇数和此时时间为偶数两种了。

我们可以把点翻倍,然后 BFS 的过程中记录此时是奇数路径还是偶数路径,进入到相应状态的点中,每个点的每个状态最多只会走到一次,这样就能在 \(O(n)\) 内求解了。这便是分层图最短路的一个简单应用。

那么每次询问怎么处理?显然,当 \(L\) 为奇数时,判断它是否大于等于奇数状态的这个点的最短路长度。若是,则说明可以,否则说明到不了。因为他们模 \(2\) 的值相同,而我们可以重复走一条边来让距离增加 \(2\)。偶数同理。

写代码的时候把 bitset 两维弄反了,喜提 RE,竟然还把样例过掉了,离谱 CCF。

注意 bitset 尖括号里的那一维是最后一维!!!进食厚仁!!!

代码:

#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pi;
int n,m,t,dis[1000005][2];
vector<int>g[1000005];
struct node{
int u,s,d;
};
queue<node>q;
bitset<2>vis[1000005];
void init()
{
memset(dis,0x3f,sizeof(dis));
dis[1][0]=0;
vis[1][0]=1;
q.push({1,0,0});
while(!q.empty())
{
node tmp=q.front();
int u=tmp.u,s=tmp.s,d=tmp.d,ns=(s+1)%2;
q.pop();
for(auto v:g[u])
{
if(vis[v][ns]==0)
{
vis[v][ns]=1;
dis[v][ns]=d+1;
q.push({v,ns,d+1});
}
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>t;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
init();
while(t--)
{
int a,l;
cin>>a>>l;
if(l%2==1)
{
if(dis[a][1]<=l)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
else
{
if(dis[a][0]<=l)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}

Luogu P5663 CSP-J2019 加工零件 题解 [ 绿 ] [ 分层图最短路 ]的更多相关文章

  1. 【题解】P3645 [APIO2015]雅加达的摩天楼(分层图最短路)

    [题解]P3645 [APIO2015]雅加达的摩天楼(分层图最短路) 感觉分层图是个很灵活的东西 直接连边的话,边数是\(O(n^2)\)的过不去 然而我们有一个优化的办法,可以建一个新图\(G=( ...

  2. P5663 加工零件 题解

    原题链接 简要题意: 给定一个图,每次询问从 \(x\) 节点开始,\(y\) 步能不能达到 \(1\) 号节点. 算法一 这也是我本人考场算法.就是 深搜 . 因为你会发现,如果 \(x\) 用 \ ...

  3. BZOJ 2763 飞行路线(分层图最短路)题解

    题意:中文题意不解释... 思路:分层图最短路,我们再开一维用来表示当前用了多少次免费次数,dis[i][j]就表示到达i点用了j次免费的最短路,有点DP的感觉. 当个模板用 参考:分层图最短路 代码 ...

  4. 【学习笔记/题解】分层图/[JLOI2011]飞行路线

    题目戳我 \(\text{Solution:}\) 关于分层图: 一般用于处理:给你\(k\)次机会对边权进行修改的最短路问题. 算法流程: 建立出\(k\)层图,对应进行\(k\)次操作后的局面. ...

  5. P5663 加工零件

    P5663 加工零件 题解 暴力搜索 搜索显然会TLE #include<iostream> #include<cstdio> #include<cstdlib> ...

  6. 上午小测3 T1 括号序列 && luogu P5658 [CSP/S 2019 D1T2] 括号树 题解

    前 言: 一直很想写这道括号树..毕竟是在去年折磨了我4个小时的题.... 上午小测3 T1 括号序列 前言: 原来这题是个dp啊...这几天出了好几道dp,我都没看出来,我竟然折磨菜. 考试的时候先 ...

  7. 【luogu P1268 树的重量】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1268 给定所有点间的最短路求原图所有路径和 形如: 我们需要计算红边+绿边 绿边 = (红边+蓝边+紫边)/ ...

  8. 【luogu P1073 最优贸易】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1073 对于状态量相互影响的题目,分层图是个不错的想法. 考虑在题目中分为: 不交易: 直接从1到n出去,为0 ...

  9. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  10. 【题解】洛谷P1073 [NOIP2009TG] 最优贸易(SPFA+分层图)

    次元传送门:洛谷P1073 思路 一开始看题目嗅出了强连通分量的气息 但是嫌长没打 听机房做过的dalao说可以用分层图 从来没用过 就参考题解了解一下 因为每个城市可以走好几次 所以说我们可以在图上 ...

随机推荐

  1. Linux之密码生成工具pwgen

    linux中生成随机字符串,可以使用pwgen 安装) ubuntu: apt-get install pwgen Centos: yum install pwgen 语法及参数) pwgen [ O ...

  2. Linux内核内存保护机制:aslr和canary

    Linux内核内存保护机制:aslr和canary ASLR ASLR技术,全称为Address space layout randomization(地址空间布局随机化),是现代通用操作系统基本都会 ...

  3. 树莓派下,打包发布能在树莓派中运行的Qt5程序和其运行环境

    目标:把Qt程序部署到新的树莓派中. 平台:树莓派 工作:把Qt程序和运行环境分别打包 一.程序打包过程如下,仅供参考: 1.新建文件夹A,把程序拷贝到文件夹中. 2.使用ldd获取依赖关系,并复制到 ...

  4. 腾讯云TKE-PV使用COS存储案例:容器目录权限问题

    背景 在TKE的集群中创建工作负载并把某一个对应的cos桶的根目录挂载到/data目录,在镜像构建的时候有把/data目录设置权限为755,但是运行容器后成功挂载cos桶的根目录到/data/目录,发 ...

  5. ASP.NET Core EventStream (SSE) 使用以及 WebSocket 比较

    在开发环境中,对于实时数据流的需求非常常见,最常用的技术包括 Server-Sent Events (SSE) 和 WebSocket. 什么是 Server-Sent Events (SSE)? S ...

  6. Linux下修改文件所属用户和组

    chgrp  用户名    文件名  -R chown 用户名   文件名  -R -R表示递归目录下所有文件 以上部分已验证 一.修改文件所属组群--chgrp    修改文件所属组群很简单-chg ...

  7. 2021年最新js手机号正则验证 最全全部号段

    手机号验证正则 /^1[3-9]\d{9}$/ js的例子 isphone.html <html> <body> <input id="Tel" ty ...

  8. modbus调试助手/mqtt调试工具/超轻巧物联网组件/多线程实时采集/各种协议支持

    一.前言说明 搞物联网开发很多年,用的最多的当属modbus协议,一个稳定好用的物联网组件是物联网平台持续运行多年的基石,所以这个物联网组件从一开始就定位于自研,为了满足各种场景的需求,当然最重要的一 ...

  9. Qt通用方法及类库8

    函数名 //异或加密算法 static QString getXorEncryptDecrypt(const QString &str, char key); //异或校验 static uc ...

  10. 基于极坐标参数方程的直线Hough变换