100.0 4 Jones Smiths Howards Wangs 5 Jones Smiths 2.0 Jones Howards 4.2 Jones Wangs 6.7 Howards Wangs 4.0 Smiths Wangs 10.0
Need 10.2 miles of cable
数组要开大~~
AC-code:
#include<cstdio>
#include<cstring>
#define max 0x3f3f3f3f
int num;
float s[10005][10005];
float prim()
{
int k,i,j,vis[10005];
float ans=0.0,dis[10005];
memset(vis,0,sizeof(vis));
for(i=1;i<num;i++)
dis[i]=s[0][i];
dis[0]=0;
vis[0]=1;
for(j=1;j<num;j++)
{
float min=max;
for(i=1;i<num;i++)
if(!vis[i]&&dis[i]<min)
{
k=i;
min=dis[i];
}
vis[k]=1;
for(i=1;i<num;i++)
if(!vis[i]&&dis[i]>s[k][i])
dis[i]=s[k][i];
}
for(i=1;i<num;i++)
ans+=dis[i];
return ans;
}
int main()
{
int n,i,j,k,p;
float m,ans,total;
char name[10000][200],str1[200],str2[200];
scanf("%f",&total);
scanf("%d",&num);
for(i=0;i<num;i++)
scanf("%s",name[i]);
scanf("%d",&n);
for(i=0;i<num;i++)
for(j=i;j<num;j++)
s[i][j]=s[j][i]=max;
for(j=0;j<n;j++)
{
scanf("%s%s%f",str1,str2,&m);
int k=-1,p=-1;
for(i=0;i<num;i++)
{
if(strcmp(str1,name[i])==0)
k=i;
else if(strcmp(str2,name[i])==0)
p=i;
if(k!=-1&&p!=-1)
{
s[k][p]=s[p][k]=m;
break;
}
}
}
ans=prim();
if(ans>total)
printf("Not enough cable\n");
else
printf("Need %.1f miles of cable\n",ans);
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 2075:Tangled in Cables 【Prim】
原文地址:http://blog.csdn.net/lin14543/article/details/47657809