加工领奖(牛客数据)

题目描述

牛客数据制作完毕,如发现错误随时更新rejudge,请关注
凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很 神奇。工厂里有 𝑛 位工人,工人们从 1∼𝑛1 \sim 𝑛1n 编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带。
如果 𝑥 号工人想生产一个被加工到第 𝐿(𝐿>1)𝐿(𝐿 \gt 1)L(L>1) 阶段的零件,则所有与 𝑥 号工人 有传送带直接相连的工人,都需要生产一个被加工到第 𝐿 −1 阶段的零件(但 𝑥 号工 人自己无需生产第 𝐿 −1 阶段的零件)。
如果 𝑥 号工人想生产一个被加工到第 1 阶段的零件,则所有与 𝑥 号工人有传送 带直接相连的工人,都需要为 𝑥 号工人提供一个原材料。
轩轩是 1 号工人。现在给出 𝑞 张工单,第 𝑖 张工单表示编号为 𝑎𝑖𝑎_𝑖ai 的工人想生产 一个第 𝐿𝑖𝐿_𝑖Li阶段的零件。轩轩想知道对于每张工单,他是否需要给别人提供原材料。他 知道聪明的你一定可以帮他计算出来!

输入描述:

第一行两个正整数 𝑛,𝑚 和 𝑞,分别表示工人的数目、传送带的数目和工单的数目。
接下来 𝑚 行,每行两个正整数 𝑢 和 𝑣,表示编号为 𝑢 和 𝑣 的工人之间存在一条零 件传输带。保证 𝑢 ≠ 𝑣。
接下来 𝑞 行,每行两个正整数 𝑎 和 𝐿,表示编号为 𝑎 的工人想生产一个第 𝐿 阶段 的零件。

输出描述:

共 𝑞 行,每行一个字符串 “Yes” 或者 “No”。如果按照第 𝑖 张工单生产,需要编号为 1 的轩轩提供原材料,则在第 𝑖 行输出 “Yes”;否则在第 𝑖 行输出 “No”。注意输出不含引号。

分析:从点1到其余点最短路问题。可以观察到,a工人的L阶零件就是找寻一条从a到1长度为L的路径,显然我们可以在两点间来回走增加偶数个路径长度。
问题演变成查找a到1是否存在奇偶性与L相同,同时小于等于L的路径(发现大于L的路径不满足题意)。因此提前求出1到其他所有点的奇数最短和偶数最短路径,就可以快速解决后续查询。
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int n,m,q,d[100005][2],v[100005][2];
vector<int>e[100005];
void spfa(int x)
{
    memset(d,127/3,sizeof(d));
    d[x][0]=0;
    int i;
    queue<pair<int,int> >q;
    q.push({x,0});
    while(q.size())
    {
        int t1=q.front().first,t2=q.front().second;
        int t3= t2^1;
        v[t1][t2]=0;
        q.pop();
        for(i=0; i<e[t1].size(); i++)
        {
            int y=e[t1][i];
            if(d[y][t3]>d[t1][t2]+1)
            {
                d[y][t3]=d[t1][t2]+1;
                if(v[y][t3]==0)
                {
                    v[y][t3]=1;
                    q.push({y,t3});
                }
            }
        }
    }
}
int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int i,j,x,y,a,l;
    cin>>n>>m>>q;
    for(i=1; i<=m; i++)
    {
        cin>>x>>y;
        e[x].push_back(y),e[y].push_back(x);
    }
    spfa(1);
    while(q--)
    {
        cin>>a>>l;
        if(d[a][l%2]<=l)
            cout<<"Yes\n";
        else
            cout<<"No\n";
    }
    return 0;
}


全部评论
点赞 回复 分享
发布于 2019-11-28 19:52

相关推荐

威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务