加工领奖(牛客数据)

题目描述

牛客数据制作完毕,如发现错误随时更新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

相关推荐

点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务