2019 CCF CSP-J2 第4题:加工零件 ← 链式前向星
【问题描述】
https://www.luogu.com.cn/problem/P5663
【算法分析】
若结点u到结点v间存在长度为L的路径,那么也一定存在长度为L+2、L+4、L+6、……的路径。因为这可以通过重复经过路径中的某些结点来实现。而且,这些路径长度的奇偶性相同,即若L为奇数,则L+2、L+4、L+6等也为奇数,若L为偶数,则L+2、L+4、L+6等也为偶数。
若结点u到结点v间存在长度为L的路径,且L大于等于结点u到结点v间的最短路径dis,即L>=dis,那么当结点v生产第L阶段的零件时,需要结点u提供原材料。
特殊情况需要特判,即当结点u与其他结点均不连通时,直接输出"No"即可。
【算法代码】
/* 链式前向星存图
val[idx] 表示第 idx 条边的权值。
e[idx] 表示第 idx 条边的终点。
ne[idx] 表示与第 idx 条边同起点的最近一次被添加的边的编号。
h[a] 表示以结点 a 为起点的最近一次被添加的边的编号。这个表述是在使用 ne[idx]=h[a] 时,也即使用 h[a]=idx++ 更新 h[a] 之前而言的。要特别注意这个语境。
*/#include <bits/stdc++.h>
using namespace std;const int N=100010;
const int M=N<<1;int h[N],e[M],ne[M],idx;
int dis[N][2]; //dis[u][0]/dis[u][1]:Shortest path to u with even/odd length
int q[M]; //Number of work ordersvoid add(int a,int b) {e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}void bfs() {memset(dis,0x3f3f3f3f,sizeof(dis));dis[1][0]=0; //The shortest path length is 0 when it reaches itself through zero edgesint hh=0, tt=0;q[tt]=1; //enqueue node 1while(hh<=tt) {int u=q[hh++];for(int i=h[u]; i!=-1; i=ne[i]) {int v=e[i];//Extend from u through an odd number of edges to v,//update dis[v][0] if relaxation can be done.if(dis[v][0]>dis[u][1]+1) {dis[v][0]=dis[u][1]+1;q[++tt]=v;}//Extend from u through an even number of edges to v,//update dis[v][1] if relaxation can be done.if(dis[v][1]>dis[u][0]+1) {dis[v][1]=dis[u][0]+1;q[++tt]=v;}}}
}int main() {int n,m,q; //number of workers, number of conveyor belts, number of work orderscin>>n>>m>>q;memset(h,-1,sizeof(h));for(int i=0; i<m; i++) {int u,v;cin>>u>>v;add(u,v), add(v,u); //undirected graph}bfs();while(q--) {int u,L;cin>>u>>L;if(h[1]==-1) cout<<"No"<<endl; //Node 1 is disconnected with other pointselse if(dis[u][L&1]<=L) cout<<"Yes"<<endl;else cout<<"No"<<endl;}return 0;
}/*
in1:
3 2 6
1 2
2 3
1 1
2 1
3 1
1 2
2 2
3 2out1:
No
Yes
No
Yes
No
Yes
---------
in2:
5 5 5
1 2
2 3
3 4
4 5
1 5
1 1
1 2
1 3
1 4
1 5out2:
No
Yes
No
Yes
Yes
*/
【参考文献】
https://blog.csdn.net/qiaoxinwei/article/details/108982789
2019 CCF CSP-J2 第4题:加工零件 ← 链式前向星相关推荐
- U81206:链式前向星模板题
[题目来源] https://www.luogu.com.cn/problem/U81206 [题目描述] 链式前向星模板题. 读入n个点,m条边,以及flag.若flag==1,则图有向,否则无向. ...
- python认证考试_Python入门习题(39)——CCF CSP认证考试真题:公共钥匙盒
CCF CSP认证考试真题:共钥匙盒 问题描述 试题编号:201709-2 试题名称:公共钥匙盒 时间限制:1.0s 内存限制:256.0MB 问题描述 有一个学校的老师共用N个教室,按照规定,所有的 ...
- CCF CSP认证菜鸟刷题日志
CCF CSP菜鸟刷题日志(c/c++) 本萌新写给自己看的,要是有大佬路过,请多多指教orz 立个flag:每日一更,至201903 9月15ccf csp,冲鸭! 今天(2019.8.18)起每天 ...
- 2019年3月CCF CSP 认证题解第一题
第一题:201903-1 [题目背景] 在数据分析中,最小值最大值以及中位数是常用的统计信息. [题目描述] 老师给了你n个整数组成的测量数据,保证有序(可能为升序或降序),可能存在重复的数据.请统计 ...
- CCF CSP认证历年真题 满分代码(持续更新中)
目标 在接下来的半年到一年时间内,补全CCF认证历年真题(A-D)的满分代码(E题随缘). 考虑到CCF认证这个东西是可以混分的,我计划对D.E题额外增加部分分代码,或许有助于不同层次的选手备赛. 除 ...
- python认证考试有哪些_Python入门习题(19)——CCF CSP认证考试真题:中间数
问题描述 试题编号:201703-1 试题名称:分蛋糕 时间限制:1.0s 内存限制:256.0MB 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, ...
- Python入门习题(19)——CCF CSP认证考试真题:分蛋糕
问题描述 试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为 ...
- 【2019 CSP-JのT4】[洛谷P5663]加工零件【最短路 · 变式】
题目描述 linklinklink 凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇.工厂里有 n 位工人,工人们从 1∼n 编号.某些工人之间存在双向的零件传送带.保证每 ...
- 【CCCC】L2-030 冰岛人 (25分) 模拟题,二叉树链式存储,从底部向上
problem L2-030 冰岛人 (25分) 2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名.好事者发现冰岛人的名字后面似乎都有个"松"(son),于是有网友科普 ...
最新文章
- 隐藏表白图“我喜欢你”就像你看不见但它也依然存在
- 如果算力足够根本不需要标注太多数据
- 【多线程】ThreadPoolExecutor类万字源码解析(注解超级详细)
- JavaScript window.setTimeout() 的详细用法
- Python爬取京东商品
- 【译】A gentle introduction to self-sovereign identity
- 专家观点:即使在云中 硬件同样至关重要
- python捕获摄像头帧_Xuggler教程:帧捕获和视频创建
- shiro框架的学习
- 全面解析腾讯最新开源 loT 操作系统 TencentOS tiny!
- iOS照片缩略图thumbnail模糊问题
- 利用D3D抓取GPU数据
- string与stream互相转换
- [2019CCPC网络赛][hdu6704]K-th occurrence(后缀数组主席树)
- DELL RAID卡管理工具 MegaRAID Storage Manager(偏重RAID常用管理命令)
- ISO 14001环境管理体系中环境因素的识别
- Poker Ⅱ 机械键盘使用说明书 自备
- FME实现三调地类变化流量表制作
- 新宝美股三大指数集体高开
- IDO-SBC3019-V1B:PX30 超强 CPU 搭载 Android/Linux 系统(Android8.1)