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(int dist [M],vector<int>adj[M],int s,int d,vector<int>ve)
- {
- //vector<int>ve;
- bool visited[M];
- set<int>st;
- for(int i=0;i<M;i++)
- dist[i]=M;
- memset(visited,false,sizeof visited);
- queue<int>q;
- q.push(s);
- visited[s]=true;
- dist[s]=0;
- // ve.push_back(s);
- st.insert(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);
- st.insert(v);
- visited[v]=true;
- dist[v]=dist[u]+1;
- }
- }
- }
- int cnt=0;
- //cout<<dist[ve[ve.size()-1]]<<endl;
- for(int i=0;i<ve.size();i++)
- {
- if(dist[ve[i]]<=d)
- cnt++;
- }
- return ve.size()-cnt;
- }
- int main()
- {
- int n,i,c=1;
- while(scanf("%d",&n)==1)
- {
- int dist[M];
- if(n==0)break;
- vector<int>adj[M];
- vector<int>ve;
- //
- set<int>st;
- 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);
- st.insert(x);
- st.insert(y);
- //count++;
- }
- }
- set<int> :: iterator it;
- for(it=st.begin();it!=st.end();it++)
- {
- ve.push_back(*it);
- }
- while(scanf("%d %d",&source,&dis)==2)
- {
- if(source==0 && dis==0)
- break;
- int ans;
- ans=bfs(dist,adj,source,dis,ve);
- printf("Case %d: %d nodes not reachable from node %d with TTL = %d\n",c++,ans,source,dis);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment