码迷,mamicode.com
首页 > 其他好文 > 详细

[最短路]2197 分糖果

时间:2017-08-15 15:09:06      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:its   int   pop   mil   using   输入   while   输出   个人   

题目描述 Description

童年的我们,将和朋友分享美好的事物作为自己的快乐。这天,C小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给另一个人需要1 秒的时间,同一个小朋友不会重复接受糖果。由于糖果足够多,如果某时刻某小朋友接受了糖果,他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,而且自己会吃一些糖果。由于嘴馋,小朋友们等不及将糖果发完,会在得到糖果后边吃边发。每个小朋友从接受糖果到吃完糖果需要m秒的时间。那么,如果第一秒C小朋友开始发糖,第多少秒所有小朋友都吃完了糖呢?

输入描述 Input Description

第一行为三个数n、p、c,为小朋友数、关系数和C小朋友的编号。
第二行为一个数m,表示小朋友吃糖的时间。
下面p行每行两个整数,表示某两个小朋友在彼此身旁

输出描述 Output Description

一个数,为所有小朋友都吃完了糖的时间

样例输入 Sample Input

4 3 1
2
1 2
2 3
1 4

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

【限制】
40%的数据满足:1<=n<=100
60%的数据满足:1<=n<=1000
100%的数据满足:1<=n<=100000
m<=n*(n-1)/2,不会有同一个关系被描述多次的情况。

【样例解释】
  第一秒,糖在1手上。第二秒,糖传到了2、3的手中。第三秒,糖传到了4的手中,此时1吃完了。第四秒,2、3吃完了。第五秒,4吃完了。所以答案是5。

------------------------------------------------------

Oops! 你的分析出现了一些问题,需要在这儿省略.

           已完成  1%                                       : (

请查阅代码:  0x23333333

------------------------------------------------------

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=100001;
 4 int n,m,p,c,dis[N];
 5 int head[N],nxt[N],to[N],cnt,val[N];
 6 bool vis[N];
 7 void add(int x,int y,int z)
 8 {
 9     cnt++;
10     nxt[cnt]=head[x];
11     head[x]=cnt;
12     to[cnt]=y;
13     val[cnt]=z;
14 }
15 void spfa()
16 {
17     queue<int>q;
18     q.push(c);
19     while(!q.empty())
20     {
21         int u=q.front();
22         q.pop();
23         vis[u]=false;
24         for(int i=head[u]; i; i=nxt[i])
25         {
26             if(dis[to[i]]>dis[u]+val[i])
27             {
28                 dis[to[i]]=dis[u]+val[i];
29                 if(!vis[to[i]])
30                 {
31                     vis[to[i]]=true;
32                     q.push(to[i]);
33                 }
34             }
35         }
36     }
37 }
38 int main()
39 {
40     /*
41         分糖果
42     */
43     cin>>n>>p>>c>>m;
44     for(int i=1; i<=p; i++)
45     {
46         int x,y;
47         cin>>x>>y;
48         add(x,y,1);
49         add(y,x,1);
50     }
51     memset(dis,0x3f,sizeof dis);
52     dis[c]=0;
53     spfa();
54     printf("%d",*max_element(dis+1,dis+n+1)+1+m);
55     return 0;
56 }

 

[最短路]2197 分糖果

标签:its   int   pop   mil   using   输入   while   输出   个人   

原文地址:http://www.cnblogs.com/InfoEoR/p/7364983.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!