শুক্রবার, ২৩ নভেম্বর, ২০১২

UVa-336::A Node Too Far


#include<cstdio>
#include<iostream>
#include<map>
#include<queue>
#include<cstring>
using namespace std;


int main()
{ int T=0;
    while(true){
                        int edge;
                        cin>>edge;
                        if(edge==0)break;
                        map<int,int>graph;
                        int a,b,i,j,tot=1;

                        vector<int>adjlist[110];



                        while(edge--){cin>>a>>b;
                                                if(graph[a]==0){graph[a]=tot++;
                                                          //cout<<tot<<"TOT"<<endl;
                                                                           }
                                                if(graph[b]==0){graph[b]=tot++;
                                                           //cout<<tot<<"TOT"<<endl;
                                                                        }
                                                int p=graph[a],q=graph[b];
                                                //          cout<<p<<" "<<q<<endl;
                                                adjlist[p].push_back(q);
                                                adjlist[q].push_back(p);


                                               }
                            //map<int,int>::iterator it;
                                //for(it=graph.begin();it!=graph.end();it++)cout<<(*it).first<<" "<<(*it).second<<endl;
                            /*for(i=1;i<tot;i++)
                                            {
                                                cout<<i<<" contains "<<(int)adjlist[i].size()<<" nodes"<<endl;
                                            }
*/
/*BFS*/

                            int source,ttl;
                            while(cin>>source>>ttl )
                                            {
                                            if(source+ttl==0)break;

                                            bool visited[1010];
                                            int distance[1010];
                                            queue<int>BFS;

                                            memset(visited,false,sizeof(visited));
                                            memset(distance,-1,sizeof(visited));


                                            distance[graph[ source]  ]=0;
                                            visited[graph[source]]=true;
                                            BFS.push(graph[source]);
                                            while(!BFS.empty())
                                                        {
                                                             int f=BFS.front();
                                                             // cout<<"F "<<f<<endl;
                                                              for(int i=0;i<adjlist[f].size();i++)
                                                                        { int v=adjlist[f][i];

                                                                            if(visited[v]==false)
                                                                                                {  //cout<<"V "<<v<<endl;
                                                                                                    distance[v]=distance[f]+1;
                                                                                                    visited[v]=true;
                                                                                                    BFS.push(v);
                                                                                                }

                                                                        }

                                                        BFS.pop();
                                                        }

int TOTAL=0;
for(int i=1;i<tot;i++)
  {
      if(distance[i]>ttl || distance[i]==-1)TOTAL++;
  }
cout<<"Case "<<++T<<": "<<TOTAL<<" nodes not reachable from node "<<source<<" with TTL = "<<ttl<<"."<<endl;
}



                        }


}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন