比赛 至少完成十道练习 评测结果 AAAAAAAAAA
题目名称 分糖果 最终得分 100
用户昵称 Mealy 运行时间 1.345 s
代码语言 C++ 内存使用 1.84 MiB
提交时间 2017-05-23 15:20:15
显示代码纯文本
  1. //2119
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <string>
  6. #include <vector>
  7. #include <queue>
  8.  
  9. const int nmax = 100010;
  10. const int INF = 0x3f3f3f3f;
  11.  
  12. using namespace std;
  13.  
  14. int N,P,C,cost;
  15. int u,v;
  16. int d[nmax] = {0};
  17. vector<int > G[nmax];
  18.  
  19. void PreDo(){
  20. scanf("%d%d%d%d",&N,&P,&C,&cost);
  21. memset(d,0,sizeof(d));
  22. for(int i = 1;i <= P;i++){
  23. scanf("%d%d",&u,&v);
  24. G[u].push_back(v);
  25. G[v].push_back(u);
  26. }
  27. }
  28.  
  29. void SPFA(){
  30. queue<int > Q;
  31. bool inqueue[nmax];
  32. memset(inqueue,0,sizeof(inqueue));
  33. Q.push(C);
  34. inqueue[C] = 1;
  35. for(int i = 0;i <= N;i++){
  36. d[i]=INF;
  37. }
  38. d[C]=0;
  39. while(!Q.empty()){
  40. int tmpx = Q.front();
  41. Q.pop();
  42. inqueue[tmpx]=0;
  43. for(int i = 0;i < G[tmpx].size();i++){
  44. int v = G[tmpx][i];
  45. if(d[v] > d[tmpx] + 1){
  46. d[v] = d[tmpx] + 1;
  47. if(!inqueue[v]){
  48. Q.push(v);
  49. inqueue[v] = 1;
  50. }
  51. }
  52. }
  53. }
  54. }
  55. void Cal(){
  56. SPFA();
  57. int ans=0;
  58. for(int i = 1;i <= N;i++){
  59. ans = max(ans,d[i]);
  60. }
  61. printf("%d",ans+cost+1);
  62. }
  63.  
  64. int main(){
  65. freopen("dividecandy.in","r",stdin);
  66. freopen("dividecandy.out","w",stdout);
  67. PreDo();
  68. Cal();
  69. return 0;
  70. }
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.