CSPJ2019 加工零件

Background:

之前 $noip $死了,泥萌都说 \(noip SPFA\) 了,现在 \(noip\) 复活了,所以 \(SPFA\) 也复活了。

(注:这里的 \(noip\) 跟 \(lxl\) 没有任何关系qwq

Description:

原题

简化版题意:

给出无向图,\(q\) 次询问,每次给定 \(A_i, L_i\) ,设 \(dis_x\) 表示点 \(x\) 与 \(1\) 号点的距离,求 \(dis_{A_i}\) 是否与 \(dis_{L_i}\) 奇偶性相同且 \(dis_{A_i}\le dis_{L_i}\)。

Solution:

分奇偶求最短路,单次询问只要 \(O(1)\) 判断就好了

然后考虑到 \(NOI 2019 D1T1\) 的教训毅然决然的用了 \(SPFA\)

\(SPFA\) 的复杂度是 \(O(kE)\),\(q\) 次询问复杂度 \(O(q)\),总复杂度大概是 \(O(kE+q)\) (?)

Code:

#include<bits/stdc++.h>
using namespace std;

const int inf = 1e9;
const int N = 1e5+1;
int n,m,qq;
struct edge
{
    int nxt;
    int to;
    int len;
}e[N*2];
int h[N*2],cnt;
int dis1[N],dis2[N]; //dis1[i]%2==1,dis2[i]%2==0
int vis1[N],vis2[N];
queue<int> q;

void add(int u,int v)
{
    e[++cnt].nxt=h[u];
    e[cnt].to=v;
    e[cnt].len=1;
    h[u]=cnt;
}

void SPFA()
{
    memset(dis1,0x3f,sizeof(dis1));
    memset(dis2,0x3f,sizeof(dis2));
    dis2[1]=0;
    q.push(1);
    while(!q.empty())
    {
        int u=q.front();q.pop();
        for(int i=h[u];i;i=e[i].nxt)
        {
            int v=e[i].to;
            if(dis1[u]+1<dis2[v]||dis2[u]+1<dis1[v])
            {q.push(v);}
            if(dis1[u]+1<dis2[v])
                dis2[v]=dis1[u]+1;
            if(dis2[u]+1<dis1[v])
                dis1[v]=dis2[u]+1;
        }
    }
}

int main()
{
    scanf("%d%d%d",&n,&m,&qq);
    for(int i=1;i<=m;++i)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        add(u,v);add(v,u);
    }
    SPFA();
    for(int i=1;i<=qq;++i)
    {
        int ai,li;
        scanf("%d%d",&ai,&li);
        if(li%2==1)
        {
            if(dis1[ai]<=li) printf("Yes\n");
            else printf("No\n");
        }
        else if(li%2==0)
        {
            if(dis2[ai]<=li) printf("Yes\n");
            else printf("No\n");
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/oierwyh/p/12267563.html

时间: 2024-10-05 12:54:01

CSPJ2019 加工零件的相关文章

题解 P5663 【加工零件【民间数据】】

讲讲我的做法 确定做法 首先,看到这道题,我直接想到的是递归,于是复杂度就上天了,考虑最短路. 如何用最短路 首先,看一张图 我们该如何解决问题? 问题:\(3\)做\(5\)阶段的零件\(1\)要不要做呢? 其实,实质就是看\(3\)到\(1\)有没有长度为\(5\)的路径. 问题:\(3\)做\(7\)阶段的零件\(1\)要不要做呢? 其实,实质就是看\(3\)到\(1\)有没有长度为\(7\)的路径. 问题:\(3\)做\(6\)阶段的零件\(1\)要不要做呢? 其实,实质就是看\(3\)

加工零件

#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n; int sum; int xianzai; int shengyu; struct jiagong { int a; int b; bool flag; }lj[1010]; bool mycmp(jiagong x,jiagong y) { return (x.b>y.b); } int main

花了一年时间开发的铣床数控系统NCStudioPro(支持钻孔,铣削,切割等铣床加工工艺)

针对目前加工厂在加工零件时候,需要根据dxf图纸来进行加工路径生成.而不是简单的通过读取NC文件进行加工.所以开发了一个铣床加工系统.与一般的数控系统不同的是,通过内嵌一个CAM模块生成加工路径.这样可以及时编程,及时加工,提高效率.这样可以读取外部NC文件也可以自行产生所需的加工路径.提实体仿真与线条仿真,三维动态显示加工位置. 整个系统介绍如下: 包含仿真,NC代码区,手动加工,自动加工,回零等. 也包含实体仿真: 加工参数如下: 同时提供精度优先,速度优先的加工选项: 同时支持NC代码的编

CAM Express加工模版设置流程

在CAM软件进行加工编程,往往需要花费很多时间进行加工编程设置,这些设置包括:加工坐标,加工几何体,加工刀具,加工方法,加工工序...等,而在加工工序中还要进一步定义刀轨样式,切削深度,切削步距...等切削参数,以及进退刀样式,横越样式...等非切削参数,最后还有转速和进给量的设置.零零总总的这些设置加起来有数十至上百个,所以要对一个产品完成可加工之完整刀轨编程,花费之时间当然不可言喻.然而,有很多时后所加工的产品外型大同小异,加工编程设置当然也都差不多,因此,为了避免每次对类似产品进行加工编程

CAM Express 多阶段加工设置流程

机械零件时常要在夹治具上进行翻面加工,在翻面之后如何将上一工站所做的结果(IPW)继承为目前工站的毛胚,以避免加工刀轨产生无效的空切削,而输出的NC代码也需对目前工站各别选定加工坐标,因此,我们藉由一个简单的范例为各位说明. 多阶段加工流程必须在装配环境当中进行,因此,我们除了在装配环境中一工站数量放入相同零件并定位之外,使用亦可将夹治具加入其中. 2  在此我们只示范两道工站,亦即对该零件之正反面加工,目前,我们已经完成第一道工站中的加工刀轨编程. 3.  接着,为翻面后的工站新增加工几何体(

hdu 6180 Schedule

Schedule Problem Description There are N schedules, the i-th schedule has start time si and end time ei (1 <= i <= N). There are some machines. Each two overlapping schedules cannot be performed in the same machine. For each machine the working time

一体软件FiberSIM_2012_SP1_HF_1.1_CATIA_V5_R19-R22复合材料设计制造软件

一体软件FiberSIM_2012_SP1_HF_1.1_CATIA_V5_R19-R22复合材料设计制造软件 ESAComp.V3.5.008 复合材料设计分析  Hypersizer.Pro.V5.3 复合材料分析与结构优化 安装方法:安装完插件之后事(安装过程不要安装FLEX服务器,不要选择服务器端口和地址),用lmgr10.dll替换安装目录下的同名文件就行了. RISA.Section.v2.0.1 1CD Geosoft Oasis Montaj 7.51   有免狗的  CAESA

基于Xenomai的实时Linux分析与研究

转自:http://blog.csdn.net/cyberlabs/article/details/6967192 引 言 随着嵌入式设备的快速发展,嵌入式设备的功能和灵活性要求越来越高,很多嵌入式设备中都开始使用操作系统.由于工作的特殊性, 很多嵌入式设备要求系统对外部事件的中断响应必须在事先设定的时限范围内完成,使系统具有可预测性,而通用的桌面操作系统大都是非实时或者是软实时的,无 法满足需求,因此就必须使用实时操作系统(Real—Time Operating System,RTOS).  

读书会(前)

主要是团队建设的问题: 老师给推荐的书<构建之法>有讲到团队和非团队的区别: 1.团队有一致的集体目标,团队要一起完成这个目标.一个团队的成员不一定要同时工作,例如接力赛跑. 2.团队成员有各自的分工,互相依赖合作,共同完成任务. 回想我们第一次比赛的场景,前期确实有点像书中所说的“搬砖人”,目标确实是一致的,但是分工很差,合作也很差,如果要说是团队的话也勉强只能算“蜂窝模式” 加工车体的时候就一起跑到加工件折腾,学习控制就一起学控制:大家热情还是有,但是效率很是低下.到了团队中后期分工渐渐的