10462 - Is There A Second Way Left?

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#define MAX 200
using namespace std;

int par[110];
vector<int>Edge;

struct node
{
    int Start,End,Cost;

}arr[MAX];

int khoj_rep(int r)
{
    if(par[r]==r)
    {
        return r;
    }
    else
    {
        return par[r]=khoj_rep(par[r]);
    }
}

bool cmp(node lhs,node rhs)
{
    return lhs.Cost<rhs.Cost;
}


int main()
{
    int a,tc=0,test,node,edge,i,j,k,u,v,counter,sum,sum1,minimum,diff,Yes;
    cin>>test;
    while(test--)
    {
        cin>>node>>edge;
        for(i=1;i<=node;i++)
        {
            par[i]=i;
        }
        for(i=0;i<edge;i++)
        {
            cin>>arr[i].Start>>arr[i].End>>arr[i].Cost;
        }

        sort(arr,arr+edge,cmp);

        counter=0;
        sum=0;
        for(j=0;j<i;j++)
        {
            u=khoj_rep(arr[j].Start);
            v=khoj_rep(arr[j].End);
            if(u!=v)
            {
                par[u]=v;
                counter++;
                Edge.push_back(j);
                sum+=arr[j].Cost;
            }
        }

        if(counter!=node-1)
        {
            printf("Case #%d : No way\n",++tc);
            Edge.clear();
            continue;
        }

        memset(par,0,sizeof(par));

        minimum=30000;
        Yes=0;
        for(j=0;j<counter;j++)
        {
            for(i=1;i<=node;i++)
            {
                par[i]=i;
            }
            sum1=0;
            for(k=0;k<edge;k++)
            {
                if(k==Edge[j])
                {
                    continue;
                }
                u=khoj_rep(arr[k].Start);
                v=khoj_rep(arr[k].End);
                if(u!=v)
                {
                    par[u]=v;
                    sum1+=arr[k].Cost;
                }

            }
            if(sum1>=sum)
            {
                Yes=1;
                diff=sum1-sum;
                if(diff<minimum)
                {
                    minimum=diff;
                    a=sum1;
                }
            }
            memset(par,0,sizeof(par));
        }

        if(counter==node-1 && Yes==0)
        {
            printf("Case #%d : No second way\n",++tc);
        }
        else
        {
            printf("Case #%d : %d\n",++tc,a);
        }

        memset(par,0,sizeof(par));
        Edge.clear();
    }
    return 0;
}

0 comments: (+add yours?)