luogu-P5663 加工零件

题目连接

  • 该题是CSP-J2-2019-T4

题目大意

  • 给出一张无向图;
  • 点表示工人,任意一个工人如果要做 x 阶段 的物品,相邻的工人需要提供 x-1 阶 的物品; 0阶 的物品设定为原材料
  • 多组询问,若 a 号工人做 L 阶物品的时候,1 号工人是否需要提供原材料(0阶物品)。

题目分析

  • 第一感觉像是树的分层,如下图:2号点如果要做1阶的物品,则相邻的都给他提供原材料(0阶物品)
    在这里插入图片描述
  • 再想,如下图:如果 2号点 要做2阶的物品, 相邻的工人 需要给他提供1阶的物品, 次相邻的工人 则需要提供0阶(原材料)的物品。
  • 如果没有次外层的援助,像 3号点4号点 的原材料从哪里来呢?答案是: 2号点 提供(其实,根据题意,2号点也同时给1号点和5号点提供原材料)

在这里插入图片描述

  • 所以,应该是和间隔有关,奇偶性?
  • 让我想到了某题类似“虫洞

解题思路

  • 跟奇偶性有关,那就尝试拆点吧,将所有点都拆成 奇点偶点
  • d[x][0] 表示:x点提供偶数阶(包括原材料:0阶)的材料;
  • d[x][1] 表示:x点提供奇数阶的材料;
  • x <=> y 的边就变成了奇偶交叉相连的两条边了;
  • 跑一遍最短路,知道所有点之间的奇偶到达情况。
  • 接下来询问就是O(1)出答案了吧。

参考代码
//CSP-J2-4-加工零件 
//奇偶拆点+最短路问题 
#include<bits/stdc++.h>
const int N=1e5+5;
using namespace std;
int n,m,qq,len;
int las[N],d[N][2],v[N];
struct nod{
   
	
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值