分糖果

分糖果

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

分糖果

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 18   Accepted Submission(s) : 3

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

童年的我们将和朋友分享美好的事物作为自己的快乐。这天,C小朋友得到了糖果,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给还有一个人须要1秒的时间,同一个小朋友不会反复接受糖果。因为糖果足够多,假设某时刻某小朋友接受了糖果。他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,并且自己会吃一些糖果。因为嘴馋,小朋友们等不及将糖果发完,会在得到糖果后边吃边发。每一个小朋友从接受糖果到吃完糖果须要m秒的时间。那么,假设第一秒C小朋友開始发糖,第几秒全部小朋友都吃完了糖呢?

Input

输入有多组数据,每组数据第1行为三个数n(<=10000),p(<=600000),c为小朋友数,关系数和C小朋友的编号。

第2行为一个数m(<=8000),表示小朋友吃糖的时间。

以下p行每行两个整数,表示某两个小朋友在彼此身旁。

Output

对于每组输入输出一个单独的整数表示从Ts到Te的最小总费用。数据保证至少存在一条道路。

Sample Input

4 3 1
2
1 2
2 3
1 4

Sample Output

5

Hint
第一秒,糖在1手上。第二秒,糖传到了2、4的手中。第三秒。糖传到了3的手中,此时1吃完了。第四秒,2、4吃完了。

第五秒。3吃完了。所以答案是5。

Author

HYNU

//思路就是找出与1相隔最远的那个点到1的距离,首先把每一条路径的权值都标记为1。找出最远点加上m就是答案。由于最后一个人吃糖须要m时间,假设最后这个这个人都吃完了,那他前面的人肯定已经吃完了。 在找的时候用到的是图的广度优先搜索,由于n非常大。那么使用vector动态数组来存储边。

#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
vector<int>num[10001];
queue<int>q;
int vis[10001],f[10001];
void bfs()
{
    int i,t;
    while(!q.empty())
    {
        t=q.front();
        q.pop();
        for(i=0;i<num[t].size();i++)
        {
            if(!vis[num[t][i]])
            {
                vis[num[t][i]]=1;
                f[num[t][i]]=f[t]+1;
                q.push(num[t][i]);
            }
        }
    }
}

int main()
{
    int n,p,c,m,i,a,b;
    while(scanf("%d%d%d%d",&n,&p,&c,&m)!=EOF)
    {
        for(i=0;i<=n;i++)
            num[i].clear();
        memset(vis,0,sizeof(vis));
        memset(f,0,sizeof(f));
        while(!q.empty()) q.pop();
        for(i=0;i<p;i++)
        {
            scanf("%d%d",&a,&b);
            num[a].push_back(b);
            num[b].push_back(a);
        }
        q.push(c);
        vis[c]=1;
        f[c]=1;
        bfs();
        int ans=0;
        for(i=1;i<=n;i++)
        {
            if(f[i]>ans) ans=f[i];
            //printf("%d\n",f[i]);
        }
        printf("%d\n",ans+m);
    }
    return 0;
}

 

 

版权声明:本文博主原创文章。博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117097.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • laravel5.6之发送邮件

    laravel5.6之发送邮件

    2021年10月24日
  • 这也许是史上最有趣的破解软件合集

    这也许是史上最有趣的破解软件合集一,破解版百度网盘,下载速度超快,公众号回复【h01】即可获取。二,微信点赞工具,使用例子:新开的饭店呀,要你出示什么100个赞就可以吃霸王餐呀,根本不用徒劳朋友圈,直接用这软件就行,给你装备的机会,好好表演,公众号回复【h02】即可获取。三,微信群二维码采集助手,这个给那些微商需要引流的就很有作用啦,普通人可能用不到,公众号回复【h03】即可获取四,一款便捷图章制作工具,不想用PS,那这款软件就…

  • QTreeView使用总结1,一个简单示例

    QTreeView使用总结1,一个简单示例1,简介本文为一个最简单的QTreeView初始化过程的示例。除去了一切操作响应等细节,只是展示使QTreeView显示出带层次结构的数据,至少需要哪些代码。只附带了一点点常用设置项。2,效果3,代码一个QTreeView插入三层数据的最简单代码示例:voidMainWindow::InitTree(){//1,构造Model,这里示例具有3层关系的model构造过程QSt…

  • inputstream中的read方法_inputformat默认是怎么读取数据的

    inputstream中的read方法_inputformat默认是怎么读取数据的importjava.io.IOException;importjava.io.InputStreamReader;/**InputStreamReader@author红烛2019年6月19日inputStreamDemo.java*/publicclassinputStreamDemo{publicstaticvoidmain(String[…

  • 2021-07-08总结

    2021-07-08总结

  • sql: 分组后按照分组规则拼接字符串 — group by与 group_concat()

    sql: 分组后按照分组规则拼接字符串 — group by与 group_concat()Markdown编辑器写博客小技巧本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗Ctrl+B斜体Ctrl+I引…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号