您的位置:首页 > 其它

POJ 2377 Bad Cowtractors(最大生成树)

2015-09-29 17:41 483 查看
题目大意:裸的最大生成树

思路:就是和最小生成树相似,Map数组初始化为0,并且在建立生成树的时候要选去最大的边进入集合。

#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
#define inf 0x3f3f3f3f
using namespace std;
int n;
int Map[1010][1010],dis[1010];
bool vis[1010];
int prim()
{
int i,j;
memset(vis,false,sizeof(vis));
for(i=1;i<=n;i++)
dis[i]=Map[1][i];
vis[1]=true;
dis[1]=0;
int ma,po,s=0;
for(i=1;i<n;i++)
{
ma=0;
po=-1;
for(j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]>ma)
{
ma=dis[j];
po=j;
}
}
if(po==-1)
return -1;
s+=ma;
vis[po]=true;
for(j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<Map[po][j])
dis[j]=Map[po][j];
}
}
return s;
}
int main()
{
int m,i,j,k;
int a,b,c;
while(~scanf("%d%d",&n,&m))
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
Map[i][j]=0;
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
if(Map[a][b]<c)
Map[a][b]=Map[b][a]=c;
}
cout<<prim()<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息