首页 > 其他分享 >P5663 [CSP-J2019] 加工零件 题解

P5663 [CSP-J2019] 加工零件 题解

时间:2024-10-24 12:09:34浏览次数:1  
标签:node P5663 int 题解 短路 路径 长度 J2019 dis

最短路

1

对于上图,如果我们相知道 $2$ 号工人想要一个 $3$ 阶段的零件,其实是看 $2$ 到 $1$

有没有一条长度为 $3$ 的路径.但如果要求 $4$ 阶段的路径,那就不一定了.

所以我们直接求一遍最短路,分奇最短路和偶最短路.

处理完后,最后一次 $\Theta (1)$ 的回答,如果路径长度过大,就是 $No$,否则就是 $Yes$.

代码

#include<bits/stdc++.h>
using namespace std;
int n, m, x;
// vector 建图
vector<int> g[100005];
struct node {
	int u, d; // 目标节点,路径长度
};
queue<node> q;
// 根据路径长度来判断奇偶
int dis[100005][2];
void bfs() {
	memset(dis, 0x3f, sizeof(dis));
	q.push((node){1, 0});
	dis[1][0] = 0; // 初始化
	while (!q.empty()) {
		node h = q.front();
		q.pop();
		int u = h.u, d = h.d;
		for (int i = 0; i < g[u].size(); i++) { // 枚举这个点相连接的节点
			int v = g[u][i];
			if (d + 1 < dis[v][(d+1)%2]) { // 最短路
				dis[v][(d+1)%2] = d + 1;
				q.push((node){v, d + 1}); // 放入队列
			}
		}
	}
}
int main() {
//	freopen("work.in", "r", stdin);
//	freopen("work.out", "w", stdout);
	scanf("%d%d%d", &n, &m, &x);
	for (int i = 1; i <= m; i++) {
		int u, v;
		scanf("%d%d", &u, &v);
		g[u].push_back(v);
		g[v].push_back(u);
	}
	bfs();
	for (int i = 1; i <= x; i++) {
		int u, t;
		scanf("%d%d", &u, &t);
        // 路径长度合法
        // t % 2 表示是奇还是偶
        //  可以接到单子的路径
		if (dis[u][t%2] >= t) printf("Yes\n");
		else printf("No\n"); // 路径长度不合法
	}
	return 0;
}

标签:node,P5663,int,题解,短路,路径,长度,J2019,dis
From: https://www.cnblogs.com/panda-lyl/p/18499338

相关文章

  • Nginx的 MIME TYPE问题导致的mjs文件加载出错的问题解决
    .mjs文件:明确表示使用ES6模块系统(ECMAScriptModules)。 在服务器用Nginx部署前端项目后,出现下面这种问题Failedtoloadmodulescript:ExpectedaJavaScriptmodulescriptbuttheserverrespondedwithaMIMEtypeof"application/octet-stream".StrictMIMEt......
  • P1668 USACO04DEC Cleaning Shifts S 题解
    P1668USACO04DECCleaningShiftsS-洛谷分析这道题最快的做法应该是贪心,但是线段树优化DP也可以做。首先看到此题,可以想到一个很暴力的区间DP:\(f[i][j]\)表示在\([i,j]\)时段内最少需要的奶牛数量。对于每头牛的空闲时段\([l,r]\),其每个子区间答案均为\(1\);对于......
  • AtCoder Snuke21 J. Drink Bar 部分分题解
    这里将每一个三元组\((a_i,b_i,c_i)\)称为一组数。Subtask1暴力枚举所有的非空子集即可。枚举方式可以采用类似状压DP的二进制枚举或者直接DFS。时间复杂度\(O(N\times2^N)\)。Subtask2性质:此时的特征值最多由两个有效组组成,原因可见Subtask3。因为\(a_i=......
  • P7074 [CSP-J2020] 方格取数 题解
    动态规划dp方格取数类似于数字三角形,均可以使用动态规划直接秒杀.但此题有$3$个方向:上、右、下.所以可以定义一个三维数组dp数组.假设$f_{i,j,1}$是从右、上方到达$(i,j)$的和的最大值.又有$f_{i,j,0}$是从右、下方到达$(i,j)$的和的最大值.我们可以先确定......
  • P7912 [CSP-J 2021] 小熊的果篮 题解
    是模拟吗?其实是的,虽然$1\len\le2\times10^5$,但是队列是个好东西.我们定义一个结构体,来存放每一个块的信息,包括类型、起点、终点,将它们放入队列当中,再使用基于广搜的思想,先处理,再合并,所以需要用到$2$个队列.注意点数据中可能会有块的类型全是$1$,或者全是$0$的情况......
  • P7071 [CSP-J2020] 优秀的拆分 题解
    二进制"优秀的拆分"如果存在,则代表$n$的二进制最低位不是$1$.$\because2^0=1$$\therefore$当$n$的二进制最低位为$1$时,不存在优秀的拆分.即$n$不是奇数.上述条件判断完后,就可以从$2$的$30$次方开始模拟(int的上限是$2^{31}-1$).代码#include<iostream>......
  • P7072 [CSP-J2020] 直播获奖 题解
    暴力使用$\Theta(n^2)$的时间复杂度来解决这题大约能拿到$60pts$.即枚举$p$,再枚举每个选手的分数.正解桶是个好东西.我们开一个桶,记录当前分数有多少人.然后计算获奖人数,分数从大到小进行枚举,直到当前人数$\ge$获奖人数.代码#include<iostream>#include<cstdio>#i......
  • [CSP-J2020] 表达式 题解
    短路这道题目中所含的运算符只有3个:与、或、非.在与运算和或运算中有2个性质.进行与运算时,若其中有一个值为0,则这个运算的结果就为0,即无需判断另1个数是否是0或1.进行或运算时,若其中有一个值为1,则这个运算的结果就为1,也无需判断另一个数是否是0或1.表达式树根据短路的性......
  • 题解 SS241023D【数颜色】/ ZROI3029【静态邻域数颜色】
    静态邻域数颜色-题目-ZhengruiOnlineJudge题目描述静态树上邻域数颜色。给一棵\(n\)个点的无根树,第\(i\)个点颜色为\(a_i\)。有\(q\)次询问,每次询问如下:给定\(x,d\),考虑所有距离\(x\)不超过\(d\)的点,求有多少种不同的颜色。形式化地,给定\(x,d\),求\(|\{a......
  • 题解 P5326【[ZJOI2019] 开关】/ SS241023B【判断题】
    已经沦落为可以随便搬进模拟赛的模板题了。。。题目描述当前有\(n\)道判断题,初始全选的错。初始给出每道题的正确答案,设\(0\)表示错,\(1\)表示对。每道题有一个参数\(p_i\),每轮会以\(\frac{p_i}{\sum_{j=1}^{n}p_j}\)的概率选择第\(i\)道题并修改(flip)这道题的答......