Maruf_Hasan

336

Dec 3rd, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define M 100000
  4. //pair<int, int>p;
  5.  
  6.  
  7. int bfs(vector<int>adj[M],int s,int d)
  8. {
  9. bool visited[M];
  10. int dist [M];
  11. memset(visited,false,sizeof visited);
  12. memset(dist,0,sizeof dist);
  13. vector<int>ve;
  14. queue<int>q;
  15. q.push(s);
  16. visited[s]=true;
  17. dist[s]=0;
  18. ve.push_back(s);
  19. while(!q.empty())
  20. {
  21. int u=q.front();
  22. q.pop();
  23. //cout<<u<<" ";
  24. for(int i=0;i<adj[u].size();i++)
  25. {
  26. int v=adj[u][i];
  27. if(visited[v]==false)
  28. {
  29. //cout<<v<<endl;
  30. q.push(v);
  31. ve.push_back(v);
  32. visited[v]=true;
  33. dist[v]=dist[u]+1;
  34. //q.push(v);
  35. //cout<<v<<" ";
  36. }
  37. }
  38. }
  39. int cnt=0;
  40. for(int i=0;i<ve.size();i++)
  41. {
  42. if(dist[ve[i]]>d)cnt++;
  43. //cout<<ve[i]<<endl;
  44. }
  45. //for(int i=0;i<M;i++)
  46. // dist[i]=0;
  47. // for(int i=0;i<M;i++)
  48. // visited[i]=false;
  49. //ve.clear();
  50. return cnt;
  51. //
  52. }
  53.  
  54.  
  55. int main()
  56. {
  57. int n,i;
  58. while(scanf("%d",&n)==1)
  59. {
  60.  
  61. if(n==0)break;
  62. vector<int>adj[M];
  63. //
  64. //set<int>s;
  65. int x,y,rem,count=0,source,dis;
  66. for(i=0;i<n;i++)
  67. {
  68. cin>>x>>y;
  69. if(x==0 && y==0)
  70. break;
  71. else
  72. {
  73. adj[x].push_back(y);
  74. adj[y].push_back(x);
  75. //count++;
  76. }
  77. }
  78.  
  79. while(scanf("%d %d",&source,&dis)==2)
  80. {
  81. if(source==0 && dis==0)
  82. break;
  83. int ans,c=1;
  84. ans=bfs(adj,source,dis);
  85.  
  86. //cout<<ans<<endl;
  87. printf("Case %d: %d nodes not reachable from node %d with TTL = %d\n",c,ans,source,dis);
  88.  
  89. c++;
  90. //for(int i=0;i<M;i++) adj[i].erase(adj[i].begin(),adj[i].end()) ;
  91. //
  92. }
  93.  
  94. //for(int i=0;i<M;i++) adj[i].erase(adj[i].begin(),adj[i].end()) ;
  95. // ve.clear();
  96. //for(int i=0;i<M;i++)
  97. //dist[i]=0;
  98. //for(int i=0;i<M;i++)
  99. // visited[i]=false;
  100. }
  101.  
  102. return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment