题目很简单,就是最大生成树的应该,最好玩的是居然PE了,我都好长时间没见过这个了,居然不认识了,想了好半天才想出来,原来是格式错误哦。。。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int oo=1e9;
const int mm=1111;
int arr_list[mm][mm],point[mm],lowcost[mm],flag[mm];
int prim(int n)
{
int i,j,k=1,f;
int maxx,sum=oo;
j=1;
for(i=1;i<=n;i++)
if(i!=j)
{
point[i]=i;
lowcost[i]=arr_list[j][i];
flag[i]=0;
}
lowcost[j]=0,flag[j]=1;
for(i=2;i<=n;i++)
{
k=1;
maxx=-1;
f=0;
for(j=2;j<=n;j++)
if(flag[j]==0&&lowcost[j]>maxx)
{
k=j;
maxx=lowcost[j];
f=1;
}
if(!f) return -1;
sum=min(sum,maxx);
flag[k]=1;
if(k==n) return sum;
for(j=2;j<=n;j++)
{
if(flag[j]==0&&arr_list[k][j]>lowcost[j])
{
point[j]=k;
lowcost[j]=arr_list[k][j];
}
}
}
return sum;
}
int main()
{
int t,n,m,i,from,to,w,cas=0;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(arr_list,oo,sizeof(arr_list));
while(m--)
{
scanf("%d%d%d",&from,&to,&w);
arr_list[from][to]=arr_list[to][from]=w;
}
printf("Scenario #%d:\n",++cas);
printf("%d\n",prim(n));
printf("\n");
}
return 0;
}