zoukankan      html  css  js  c++  java
  • 分糖果

    描述

     

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

    输入

     

    第一行为三个数n、p、c,为小朋友数、关系数和C小朋友的编号。

    第二行为一个数m,表示小朋友吃糖的时间。

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

     

    输出

     

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

    样例输入

     

    样例输出

     

    提示

    【样例解释】

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

    【限制】

    40%的数据满足:1≤n≤100

    60%的数据满足:1≤n≤1000

    100%的数据满足:1≤n≤100000

    m≤n*(n-1)/2,不会有同一个关系被描述多次的情况。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int n,p,c;
     5 int m;
     6 vector<int> G[100005];
     7 int dis[100005];
     8 int vis[100005];
     9 
    10 int maxx;
    11 
    12 inline int read(){
    13     int x=0,f=1;
    14     char ch=getchar();
    15     while(ch<'0'||ch>'9'){
    16         if(ch=='-') f=-1;
    17         ch=getchar();
    18     }
    19     while(ch>='0'&&ch<='9'){
    20         x=(x<<1)+(x<<3)+(ch^48);
    21         ch=getchar();
    22     }
    23     return x*f;
    24 }
    25 
    26 void bfs(int ee){
    27     queue<pair<int,int> > que;
    28     vis[ee]=1;
    29     que.push({ee,1});
    30     while(!que.empty()){
    31         int u=que.front().first,w=que.front().second;
    32         que.pop();
    33         for(int i=0;i<G[u].size();i++){
    34             int X=G[u][i];
    35             if(vis[X]==0){    //如果这个人分到过了就不能在给他分了(先到先得)
    36                 vis[X]=1;
    37                 que.push({X,w+1});
    38                 maxx=max(maxx,w+1);
    39             }
    40         }
    41     }
    42 }
    43 
    44 int main(){
    45     n=read();
    46     p=read();
    47     c=read();
    48     m=read();
    49     for(int i=1;i<=p;i++){
    50          int d1,d2;
    51          d1=read();
    52          d2=read();
    53          G[d1].push_back(d2);
    54          G[d2].push_back(d1);
    55     }
    56     bfs(c);
    57     printf("%d
    ",maxx+m);
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    【LeetCode】17. Letter Combinations of a Phone Number
    【LeetCode】16. 3Sum Closest
    【LeetCode】15. 3Sum 三个数和为0
    【LeetCode】14. Longest Common Prefix 最长前缀子串
    【LeetCode】13. Roman to Integer 罗马数字转整数
    【LeetCode】12. Integer to Roman 整型数转罗马数
    【LeetCode】11. Container With Most Water
    【LeetCode】10. Regular Expression Matching
    Models of good programmer
    RSA Algorithm
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/11248368.html
Copyright © 2011-2022 走看看