zoukankan      html  css  js  c++  java
  • 【POJ 2485】 Highways

    【POJ 2485】 Highways

    最小生成树模板

    Prim

    #include
    
    using namespace std;
    
    int mp[501][501];
    int dis[501];
    bool vis[501];
    int n;
    
    int Prim()
    {
        int i,j,w,p,mm = 0;
        memset(dis,-1,sizeof(dis));
        memset(vis,0,sizeof(vis));
        dis[1] = 0;
        for(i = 0; i < n; ++i)
        {
            w = INF;
            for(j = 1; j <= n; ++j)
            {
                if(!vis[j] && dis[j] < w && dis[j] != -1)
                {
                    p = j;
                    w = dis[j];
                }
            }
            vis[p] = 1;
            mm = max(mm,w);
            for(j = 1; j <= n; ++j)
            {
                if(!vis[j] && (dis[j] == -1 || dis[j] > mp[p][j]))
                    dis[j] = mp[p][j];
            }
        }
        return mm;
    }
    
    int main()
    {
        int t,i,j;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(i = 1; i <= n; ++i)
            {
                for(j = 1; j <= n; ++j)
                {
                    scanf("%d",&mp[i][j]);
                }
            }
            printf("%d
    ",Prim());
        }
        return 0;
    }
    

    Kruskal

    #include
    
    using namespace std;
    
    typedef struct Edge
    {
        int u,v,w;
        bool operator < (const struct Edge a)const
        {
            return w < a.w;
        }
    }Edge;
    
    Edge eg[255555];
    int pre[555];
    int tp;
    
    void Init(int n)
    {
        int i;
        for(i = 1; i <= n; ++i)
            pre[i] = i;
    }
    
    int Find(int x)
    {
        if(x != pre[x]) pre[x] = Find(pre[x]);
        return pre[x];
    }
    
    int main()
    {
        int t,n,i,j,w,k,r,mm,cnt;
        scanf("%d",&t);
        while(t--)
        {
            tp = 0;
            scanf("%d",&n);
            Init(n);
            for(i = 1; i <= n; ++i)
            {
                for(j = 1; j <= n; ++j)
                {
                    scanf("%d",&w);
                    if(j > i)
                    {
                        eg[tp].w = w;
                        eg[tp].u = i;
                        eg[tp++].v = j;
                    }
                }
            }
            sort(eg,eg+tp);
            mm = cnt = 0;
            for(i = 0; i < tp; ++i)
            {
                k = Find(eg[i].u);
                r = Find(eg[i].v);
                if(k != r)
                {
                    pre[k] = r;
                    mm = max(mm,eg[i].w);
                    cnt++;
                }
                if(cnt == n-1) break;
            }
            printf("%d
    ",mm);
        }
        return 0;
    }
    
  • 相关阅读:
    ES6核心内容精讲--快速实践ES6(三)
    ES6核心内容精讲--快速实践ES6(二)
    ES6核心内容精讲--快速实践ES6(一)
    webpack入门
    centos 7 nodejs 安装
    android结合Jenkins使用V2签名
    dockerfile 创建Jenkins镜像
    ubuntu docker 安装
    shell sed语法详解
    mac关于stf开源工具安装
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7066630.html
Copyright © 2011-2022 走看看