Advertisement
a53

genius

a53
Jul 13th, 2019
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.30 KB | None | 0 0
  1. #include <cstdio>
  2. const int maxn = 50001;
  3. FILE *in = fopen("genius.in","r"), *out = fopen("genius.out","w");
  4. struct graf
  5. {
  6. int nod;
  7. graf *next;
  8. };
  9.  
  10. int n,m,s,p,sol;
  11. graf *a[maxn];
  12. int v[maxn],c[maxn];
  13.  
  14. void add(int what, int where)
  15. {
  16. graf *q = new graf;
  17.  
  18. q->nod = what;
  19. q->next = a[where];
  20. a[where] = q;
  21. }
  22.  
  23. void read()
  24. {
  25. fscanf(in,"%d %d",&n,&m);
  26. int x,y;
  27. for (int i=0;i<m;++i)
  28. {
  29. fscanf(in, "%d %d", &x, &y);
  30.  
  31. add(y, x);
  32. add(x, y);
  33. }
  34. fscanf(in,"%d %d",&s,&p);
  35. }
  36.  
  37. void bfs()
  38. {
  39. for ( int i = 1; i <= n; ++i )
  40. v[i] = -1;
  41.  
  42. v[s] = 0;
  43.  
  44. int p = 0, u = 0;
  45. c[p] = s;
  46.  
  47. while ( p <= u )
  48. {
  49. int x = c[p++];
  50.  
  51. graf *q = a[x];
  52.  
  53. while ( q )
  54. {
  55. if ( v[q->nod] == -1 )
  56. {
  57. v[q->nod] = v[x] + 1;
  58. c[++u] = q->nod;
  59. }
  60.  
  61. q = q->next;
  62. }
  63. }
  64.  
  65. for ( int i = 1; i <= n; ++i )
  66. if(sol<v[i])
  67. sol=v[i];
  68. }
  69.  
  70. int main()
  71. {
  72. read();
  73. bfs();
  74. v[s]=1;
  75. for ( int i = 1; i <= n; ++i )
  76. if(v[i]==-1)
  77. {
  78. fprintf(out,"%d ",-1);
  79. return 0;
  80. }
  81. fprintf(out, "%d ",sol+p);
  82. return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement