Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define M 100000
- //pair<int, int>p;
- int bfs(vector<int>adj[M],int s,int d)
- {
- bool visited[M];
- int dist [M];
- memset(visited,false,sizeof visited);
- memset(dist,0,sizeof dist);
- vector<int>ve;
- queue<int>q;
- q.push(s);
- visited[s]=true;
- dist[s]=0;
- ve.push_back(s);
- while(!q.empty())
- {
- int u=q.front();
- q.pop();
- //cout<<u<<" ";
- for(int i=0;i<adj[u].size();i++)
- {
- int v=adj[u][i];
- if(visited[v]==false)
- {
- //cout<<v<<endl;
- q.push(v);
- ve.push_back(v);
- visited[v]=true;
- dist[v]=dist[u]+1;
- //q.push(v);
- //cout<<v<<" ";
- }
- }
- }
- int cnt=0;
- for(int i=0;i<ve.size();i++)
- {
- if(dist[ve[i]]>d)cnt++;
- //cout<<ve[i]<<endl;
- }
- //for(int i=0;i<M;i++)
- // dist[i]=0;
- // for(int i=0;i<M;i++)
- // visited[i]=false;
- //ve.clear();
- return cnt;
- //
- }
- int main()
- {
- int n,i;
- while(scanf("%d",&n)==1)
- {
- if(n==0)break;
- vector<int>adj[M];
- //
- //set<int>s;
- int x,y,rem,count=0,source,dis;
- for(i=0;i<n;i++)
- {
- cin>>x>>y;
- if(x==0 && y==0)
- break;
- else
- {
- adj[x].push_back(y);
- adj[y].push_back(x);
- //count++;
- }
- }
- while(scanf("%d %d",&source,&dis)==2)
- {
- if(source==0 && dis==0)
- break;
- int ans,c=1;
- ans=bfs(adj,source,dis);
- //cout<<ans<<endl;
- printf("Case %d: %d nodes not reachable from node %d with TTL = %d\n",c,ans,source,dis);
- c++;
- //for(int i=0;i<M;i++) adj[i].erase(adj[i].begin(),adj[i].end()) ;
- //
- }
- //for(int i=0;i<M;i++) adj[i].erase(adj[i].begin(),adj[i].end()) ;
- // ve.clear();
- //for(int i=0;i<M;i++)
- //dist[i]=0;
- //for(int i=0;i<M;i++)
- // visited[i]=false;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment