心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
MST问题。
以下是我的代码:
#include<algorithm>
#include
<cstdio>
using namespace std;
const int kMaxn(1007);
const int kMaxm(15007);
struct Edge
{
    
int u,v,w;
};
bool operator<(const Edge &a,const Edge &b)
{
    
return (a.w<b.w);
}

int n,m,f[kMaxn];
Edge e[kMaxm],ans[kMaxn];

int Getf(int x)
{
    
if(x==f[x])
        
return x;
    f[x]
=Getf(f[x]);
    
return f[x];
}

int main()
{
    
while(scanf("%d%d",&n,&m)==2)
    {
        
for(int i=1;i<=n;i++)
            f[i]
=i;

        
for(int i=1;i<=m;i++)
            scanf(
"%d%d%d",&e[i].u,&e[i].v,&e[i].w);

        sort(e
+1,e+m+1);

        
for(int i=1,j=0;i<=&& j<n-1;i++)
        {
            
int u(e[i].u),v(e[i].v),fu(Getf(u)),fv(Getf(v));
            
if(fu!=fv)
            {
                f[fu]
=fv;
                j
++;
                ans[j].u
=u;
                ans[j].v
=v;
                ans[j].w
=e[i].w;
            }
        }

        printf(
"%d\n",ans[n-1].w);
        printf(
"%d\n",n-1);
        
for(int i=1;i<n;i++)
            printf(
"%d %d\n",ans[i].u,ans[i].v);
    }

    
return 0;
}
posted on 2011-07-31 09:44 lee1r 阅读(228) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:图论

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理