睡不着了 起来A一题
最小生成树变形之 最大生成树...
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#include<algorithm>
#include<vector>
#include<string.h>
#include<queue>
#include <stdio.h>
#include <string.h>
#define N 1100
int map[N][N],low[N],visited[N];
int n;
int prim()
{
int i,j,pos,min,result=0;
memset(visited,0,sizeof(visited));
visited[1]=1;pos=1;
for(i=1;i<=n;i++)
if(i!=pos) low[i]=map[pos][i];
for(i=1;i<n;i++)
{
min=-1;
for(j=1;j<=n;j++)
if(visited[j]==0 && min<low[j])
{
min=low[j];
pos=j;
}
if (min == -1)
return -1;
result+=min;
visited[pos]=1;
for(j=1;j<=n;j++)
if(visited[j]==0 && low[j]<map[pos][j])
low[j]=map[pos][j];
}
return result;
}
int main()
{
int i,v,j,ans,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int c,d;
memset(map,-1,sizeof(map));
for(j=1;j<=m;j++)
{
scanf("%d%d%d",&c,&d,&v);
if(v>map[c][d])
map[c][d]=map[d][c]=v;
}
ans=prim();
if (ans < 0)
printf ("-1\n");
else
printf("%d\n",ans);
}
return 0;
}