fork download
  1. #include <iostream>
  2. #include<bits/stdc++.h>
  3.  
  4. using namespace std;
  5. int main() {
  6. int n,e;
  7. cin>>n>>e;
  8. vector<int> g[n+1];
  9. vector<int> val(n+1);
  10. for(int i=1;i<=n;i++){
  11. cin>>val[i];
  12.  
  13. }
  14.  
  15. for(int i=1;i<=e;i++){
  16. int u;
  17. int v;
  18. cin>>u>>v;
  19.  
  20. g[u].push_back(v);
  21. g[v].push_back(u);
  22. }
  23.  
  24. int s;
  25. cin>>s;
  26. queue<int> q;
  27. q.push(s);
  28. vector<int> level(n+1,-1);
  29. level[s]=0;
  30.  
  31.  
  32.  
  33. vector<int> visited(n+1,0);
  34. visited[s]=1;
  35.  
  36. vector<int> shortest(n+1,0);
  37. shortest[s]=0;
  38.  
  39.  
  40.  
  41. vector<int> five_count(n+1,0);
  42.  
  43. if(val[s]==5){
  44. five_count[s]=1;
  45. }
  46.  
  47.  
  48.  
  49.  
  50. while(!q.empty()){
  51. int a = q.front();
  52.  
  53.  
  54. q.pop();
  55.  
  56.  
  57. for(auto it : g[a]){
  58. if(!visited[it]){
  59. q.push(it);
  60. visited[it]=1;
  61. shortest[it] = shortest[a]+1;
  62. if(val[it]==5){
  63. five_count[it] = five_count[a] + 1;
  64. }
  65. else{
  66. five_count[it] = five_count[a];
  67. }
  68. }
  69. else{
  70. if(shortest[it]==shortest[a]+1){
  71. if(val[it]==5){
  72. five_count[it] = max(five_count[it],five_count[a]+1);
  73. }else{
  74. five_count[it] = max(five_count[it],five_count[a]);
  75. }
  76. }
  77. }
  78. }
  79. }
  80.  
  81. for(int i=1;i<=n;i++){
  82. if (visited[i] == 0) {
  83. cout << -1 << " " << -1 << "\n";
  84. } else {
  85. cout << shortest[i] << " " << five_count[i] << "\n";
  86. }
  87.  
  88.  
  89. }
  90. }
Success #stdin #stdout 0s 5320KB
stdin
8 8 
0 5 5 0 0 5 5 5 
1 2
2 3 
3 4 
4 5 
1 6
6 7
7 8 
8 5 
1
stdout
0 0
1 1
2 2
3 2
4 3
1 1
2 2
3 3