分糖果

分糖果

大家好,又见面了,我是全栈君,今天给大家准备了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)


相关推荐

  • Docker离线安装教程「建议收藏」

    Docker离线安装教程「建议收藏」一、基础环境Centos7环境下载docker包,我们演示的是19.3.12下载地址将下载好的压缩包上传至服务器下二、开始安装解压docker包tar-zxvfdocker-19.03.12.tgz将解压后的文件复制到/usr/bin下cpdocker/*/usr/bin将docker注册为servicevi/etc/systemd/system/docker.service复制下列配置到docker.service并保存(:wq)[Un

  • angular.Js_力量提供者

    angular.Js_力量提供者点击查看AngularJS系列目录转载请注明出处:http://www.cnblogs.com/leosx/每个Web应用程序都是有多个对象组合、协作来完成任务的。这些对象需要被实例化,并且连接在一

  • 什么是OJ _OJ是什么?[通俗易懂]

    什么是OJ _OJ是什么?[通俗易懂]OnlineJudgeSystem即在线评测系统(以下简称OJ),用户可以在线的提交程序源代码,OJ会对这些源代码进行编译和运行,并且通过每道题目预先设计的数据和时空限制等标准来检验用户程序的正确性。用户提交的程序在OJ下执行的时候会受到严格的限制,包括且不限于时间的限制、内存的限制、系统接口的限制和安全限制。用户程序执行的输出结果会被OJ接收并保存,然后通过裁判程序进行比较用户输出和标…

  • CentOS安装图形界面

    CentOS安装图形界面VmwareCentOS图形界面

  • Oracle/SQL 修改字段类型和长度[通俗易懂]

    Oracle/SQL 修改字段类型和长度[通俗易懂]标准SQL修改字段类型和长度语句:ALTERTABLEtableNamemodifycolumncolumnName类型; 例如Mysql的修改字段类型语句:altertabletestmodifycolumnnamevarchar(255);Oracle修改字段类型和长度语句:ALTERTABLEtableNam

  • 控制中的各种函数MATLAB仿真

    控制中的各种函数MATLAB仿真控制系统的MATLAB仿真1MATLAB简介MATLAB是Mathworks公司开发的一种集数值计算、符号计算和图形可视化三大基本功能于一体的功能强大、操作简单的优秀工程计算应用软件。MATLAB不仅可以处理代数问题和数值分析问题,而且还具有强大的图形处理及仿真模拟等功能。从而能够很好的帮助工程师及科学家解决实际的技术问题。MATLAB的含义是矩阵实验室(MatrixL

发表回复

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

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