10685 - Nature

#include<stdio.h>
#include<string.h>
#include<map>
#include<iostream>
using namespace std;
map<string,int>mymap;
int arr[5005];
int arr1[5005];
int par[5005];
int khoj_rep(int r)
{
    if(par[r]==r)
    {
        return r;
    }
    else
    {
        return par[r]=khoj_rep(par[r]);
    }
}
int main()
{
    int a,b,C,R,tag,i,j,k,u,v,maximum,counter,l,p;
    string s,s1,s2;
    while(cin>>C>>R)
    {
        if(C==0&&R==0)
        {
            break;
        }
        tag=0;
        for(i=1; i<=C; i++)
        {
            cin>>s;
            if(!mymap[s])
            {
                mymap[s]=++tag;
                par[i]=mymap[s];
            }
        }
        for(j=1; j<=R; j++)
        {
            cin>>s1>>s2;
            arr[j]=mymap[s1];
            arr1[j]=mymap[s2];
            u=khoj_rep(mymap[s1]);
            v=khoj_rep(mymap[s2]);
            if(u==v)
            {
                continue;
            }
            else
            {
                par[u]=v;
            }
        }
        for(k=1; k<=R; k++)
        {
            u=khoj_rep(arr[k]);
            v=khoj_rep(arr1[k]);
            if(u==v)
            {
                continue;
            }
            else
            {
                par[u]=v;
            }
        }
        maximum=0;
        for(l=1; l<=C; l++)
        {
            counter=0;
            for(p=l; p<=C; p++)
            {
                if(par[l]==par[p])
                {
                    counter++;
                }
            }
            if(maximum<counter)
            {
                maximum=counter;
            }
        }
        cout<<maximum<<endl;
        memset(arr,0,sizeof(arr));
        memset(arr1,0,sizeof(arr1));
        memset(par,0,sizeof(par));
        mymap.clear();
    }
    return 0;
}

0 comments: (+add yours?)