#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;
}
#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?)
Post a Comment