CSPJ2019 加工零件

Posted oierwyh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
");
            else printf("No
");
        }
        else if(li%2==0)
        {
            if(dis2[ai]<=li) printf("Yes
");
            else printf("No
");
        }
    }
    return 0;
}

以上是关于CSPJ2019 加工零件的主要内容,如果未能解决你的问题,请参考以下文章

CNC零件加工如何保证质量?

贪心-零件加工

零件加工 贪心 题解

机械生产制造企绝大部分零件需要考几级加工的方法来获得

怎样备份FANUC 0i零件加工程序、PMC程序、PMC 参数,CNC参数、螺距补偿、宏变量数据需要备份,对于数控机

机加尺寸精度等级有多少级?车床加工能达到啥精度等级?怎样确定一个零件的加工工时?