zoukankan      html  css  js  c++  java
  • POJ 1251(最小生成树裸题)

    POJ1251

    题目:输入n表示n个点,接下来n-1行每行输入一个字母表示起点,和一个k表示有k个点与他相连,该点的名字和此边长度

    求他的最小生成树

    #include <iostream>
    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <map>
    #include <iomanip>
    #include <algorithm>
    #include <queue>
    #include <stack>
    #include <set>
    #include <vector>
    //const int maxn = 1e5+5;
    #define ll long long
    ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
    ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
    
    #define MAX INT_MAX
    #define FOR(i,a,b) for( int i = a;i <= b;++i)
    #define bug cout<<"--------------"<<endl
    using namespace std;
    int ans,n,tail;
    int pre[500];
    struct node
    {
        int x,y,z;
    }edge[5000];
    bool cmp(node a,node b)
    {
        return a.z<b.z;
    }
    
    int Find(int x)
    {
        if(x==pre[x]) return x;
        return Find(pre[x]);
    }
    void clearr()
    {
        memset(edge,0,sizeof(edge));
        memset(pre,0,sizeof(pre));
        ans=0;
    }
    int main()
    {
    
        while(scanf("%d",&n))
        {
            if(n==0) break;
            clearr();
            FOR(i,1,n-1)
            {
                char a,b;
                int k,num;
                //scanf("%c %d",&a,&k);
                cin>>a>>k;
                FOR(j,1,k)
                {
                    //scanf("%c %d",&b,&num);
                    cin>>b>>num;
                    edge[++tail].x=a-64;
                    edge[tail].y=b-64;
                    edge[tail].z=num;
                }
            }
            sort(edge+1,edge+1+tail,cmp);
    
            FOR(i,1,n) pre[i]=i;
    
            FOR(i,1,tail)
            {
                int headx=Find(edge[i].x);
                int heady=Find(edge[i].y);
                if(headx==heady) continue;
                pre[headx]=heady;
                ans+=edge[i].z;
            }
            cout<<ans<<endl;
    
    
    //        FOR(i,1,tail)
    //        {
    //            cout<<edge[i].x<<" "<<edge[i].y<<" "<<edge[i].z<<endl;
    //        }
        }
    }
  • 相关阅读:
    Axis2发布Webservice进行身份校验
    Spring集成Axis2
    分布式事务解决方案之TCC
    Lua 数据类型
    Lua 基本语法(1)
    Axis发布Webservice服务
    Linux中NFS服务器搭建
    SpringBoot多环境切换
    springboot中spring.profiles.include的妙用
    oracle树形语句
  • 原文地址:https://www.cnblogs.com/jrfr/p/11280126.html
Copyright © 2011-2022 走看看