Search Here

Wednesday, June 10, 2015

UVa - 567 ( Risk Solution )


Try Yourself First. For help Scroll Down .

Tip : The toughest thing in this problem is to understand the Input Specification .Here the problem says to find the minimum number of country you have to win to go from a SOURCE to DESTINATION . This line clearly means a Normal BFS problem . So the INPUT SPECIFICATION . Huh ? It says we can take a total of 20 lines . From which 19 lines are the Graph Specification and 20th line are the query line we have to check out . So............. Check this Points given below .
Point 1 : The 1st line means 1st node , the 2nd node means the 2nd..... the 19th line means 19th node .
Point 2 : The 1st number of each line denotes how many nodes with connected the each node.If
              1st line contains 2 3 7 that means Node 1 is connected to TWO nodes.Those are 3 & 7.
              2nd line contains 3 2 8 9 that means Node 2 connected to THREE nodes.Those are 2, 8 & 9.

Hope You Got It . 
Point 3 : Now for each Query Manipulate the BFS and Find Minimum Country to win . Don't forget to clear  your GRAPH after completing A TEST SET . Give a special Care to the Output Formation . Otherwise you will get PRESENTATION ERROR . Go to Code Now .


Code :

#include<bits/stdc++.h>
using namespace std;

vector<int>graph[21];

void bfs(int s, int d)
{
    queue< int >q;
    int visited[50]={0}, level[50];
    visited[s]=1;
    level[s]=0;
    q.push(s);
    while(!q.empty())
    {
        int u=q.front();
        for(int l=0; l<graph[u].size(); l++)
        {
            int v = graph[u][l];
            if(!visited[v])
            {
                visited[v]=1;
                level[v] = level[u]+1;
                q.push(v);
            }
        }
        q.pop();
    }
   printf("%2d to %2d: %d\n", s, d, level[d]);
}

int main()
{
    int x, y, caseno=0;
    while(scanf("%d",&x)==1)
    {
        for(int j=0; j<x; j++)
        {
            scanf("%d",&y);
            graph[1].push_back(y);
            graph[y].push_back(1);
        }
        for(int i=2; i<=19; i++)
        {
            scanf("%d",&x);
            for(int j=0; j<x; j++)
            {
                scanf("%d",&y);
                graph[i].push_back(y);
                graph[y].push_back(i);
            }
        }
        int src, dest, n;
        scanf("%d",&n);
        printf("Test Set #%d\n",++caseno);
        for(int i=0; i<n; i++)
        {
            scanf("%d %d",&src, &dest);
            bfs(src,dest);
        }
       printf("\n");
       for(int i=0; i<21; i++)
       {
           graph[i].clear();
       }
    }
    return 0;
}


=> Need Help . Leave a Comment .

No comments:

Post a Comment