Luogu P5663 CSP-J2019 加工零件 题解 [ 绿 ] [ 分层图最短路 ]
加工零件:非常好的一道图论题。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 加工零件 题解 [ 绿 ] [ 分层图最短路 ]的更多相关文章
- 【题解】P3645 [APIO2015]雅加达的摩天楼(分层图最短路)
[题解]P3645 [APIO2015]雅加达的摩天楼(分层图最短路) 感觉分层图是个很灵活的东西 直接连边的话,边数是\(O(n^2)\)的过不去 然而我们有一个优化的办法,可以建一个新图\(G=( ...
- P5663 加工零件 题解
原题链接 简要题意: 给定一个图,每次询问从 \(x\) 节点开始,\(y\) 步能不能达到 \(1\) 号节点. 算法一 这也是我本人考场算法.就是 深搜 . 因为你会发现,如果 \(x\) 用 \ ...
- BZOJ 2763 飞行路线(分层图最短路)题解
题意:中文题意不解释... 思路:分层图最短路,我们再开一维用来表示当前用了多少次免费次数,dis[i][j]就表示到达i点用了j次免费的最短路,有点DP的感觉. 当个模板用 参考:分层图最短路 代码 ...
- 【学习笔记/题解】分层图/[JLOI2011]飞行路线
题目戳我 \(\text{Solution:}\) 关于分层图: 一般用于处理:给你\(k\)次机会对边权进行修改的最短路问题. 算法流程: 建立出\(k\)层图,对应进行\(k\)次操作后的局面. ...
- P5663 加工零件
P5663 加工零件 题解 暴力搜索 搜索显然会TLE #include<iostream> #include<cstdio> #include<cstdlib> ...
- 上午小测3 T1 括号序列 && luogu P5658 [CSP/S 2019 D1T2] 括号树 题解
前 言: 一直很想写这道括号树..毕竟是在去年折磨了我4个小时的题.... 上午小测3 T1 括号序列 前言: 原来这题是个dp啊...这几天出了好几道dp,我都没看出来,我竟然折磨菜. 考试的时候先 ...
- 【luogu P1268 树的重量】 题解
题目链接:https://www.luogu.org/problemnew/show/P1268 给定所有点间的最短路求原图所有路径和 形如: 我们需要计算红边+绿边 绿边 = (红边+蓝边+紫边)/ ...
- 【luogu P1073 最优贸易】 题解
题目链接:https://www.luogu.org/problemnew/show/P1073 对于状态量相互影响的题目,分层图是个不错的想法. 考虑在题目中分为: 不交易: 直接从1到n出去,为0 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【题解】洛谷P1073 [NOIP2009TG] 最优贸易(SPFA+分层图)
次元传送门:洛谷P1073 思路 一开始看题目嗅出了强连通分量的气息 但是嫌长没打 听机房做过的dalao说可以用分层图 从来没用过 就参考题解了解一下 因为每个城市可以走好几次 所以说我们可以在图上 ...
随机推荐
- Python3之常用包汇总
Python包网站: https://pypi.org/ 1. 繁体与简体转换(https://github.com/berniey/hanziconv.git) pip install hanzic ...
- 设计模式【3.1】-- 浅谈代理模式之静态、动态、cglib代理
代理模式:为其他对象提供一种代理以控制对这个对象的访问,在某种情况下,一个对象不适合或者不能够直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用. 可以这么理解:使用代理对象,是为 ...
- vue3 封装api接口
新建axiosj.ts import axios from 'axios'; import { showMessage } from "./status"; // 引入状态码文件 ...
- c++的OJ练习一
1.1599.米老鼠偷糖果 2.1323.扩建花圃问题 3.P1425.小鱼的游泳时间 4.1598.文具店的折扣 5.P5706.再分肥宅水 6.1345.玫瑰花圃 7.P3954.NOIP2017 ...
- 迁移现有用户数据到ABP vNext
前言 使用 ABP vNext(下文简称 ABP)时,通常都是从 cli 开始新建模板,从一个空项目开始.对已经存续的项目来说,现有的数据,特别是用户等核心数据需要进行迁移. 老的项目,随着规模越来越 ...
- Linux 网络设置及管理
Linux 网络管理 网络管理 1.使用NetworkManager管理网络 NetworkManager(网络管理器)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保持设备连接和开启并激活 ...
- Ubuntu 的网络图标不见了,怎么解决
1. 问题 Ubuntu 的网络图标不见了 2. 解决 service network-manager status # 此时,你会发现状态是 active(running),不用管 service ...
- Linux安装EasyConnect
首先下载并安装EasyConnect客户端 wget http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_767/Easy ...
- Qt开源作品43-超级图形字体
一.前言 对于众多的Qter程序员来说,美化UI一直是个老大难问题,毕竟这种事情理论上应该交给专业的美工妹妹去做,无奈在当前整体国际国内形式之下,绝大部分公司是没有专门的美工人员的,甚至说有个兼职的美 ...
- JVM实战—9.线上FGC的几种案例
大纲 1.如何优化每秒十万QPS的社交APP的JVM性能(增加S区大小 + 优化内存碎片) 2.如何对垂直电商APP后台系统的FGC进行深度优化(定制JVM参数模版) 3.不合理设置JVM参数可能导致 ...