zoukankan      html  css  js  c++  java
  • POJ 2421 Constructing Roads(简单最小生成树模板题)

    给你n个点,然后求最小生成树。特殊之处在于有q个点之间已经连上了边

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    const int INF=0x3f3f3f3f;
    const int maxn=505;
    
    int lowc[505];
    bool vis[505];
    int cost[maxn][maxn];
    int n;
    
    int prim(int cost[][maxn],int n)//编号从1-n
    {
        int i,j,p;
        int minc,res=0;
        memset(vis,0,sizeof(vis));
        vis[1]=1;
        for(i=1;i<=n;i++)
           lowc[i]=cost[1][i];
        for(i=1;i<n;i++)
        {
            minc=INF;
            p=-1;
            for(j=1;j<=n;j++)
                if(vis[j]==0&&minc>lowc[j])
                {minc=lowc[j];p=j;}
            if(minc==INF)return -1;
            res+=minc;vis[p]=1;
            for(j=1;j<=n;j++)
               if(vis[j]==0&&lowc[j]>cost[p][j])
                 lowc[j]=cost[p][j];
        }
        return res;
    }
    
    
    int main()
    {
        int n,q;
        while(cin>>n)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    cin>>cost[i][j];
                }
            }
            cin>>q;
            int a,b;
            for(int i=0;i<q;i++)
            {
                cin>>a>>b;
                cost[a][b]=0;
                cost[b][a]=0;
            }
            cout<<prim(cost,n)<<endl;
    
        }
    
        
    
        return 0;
    }
  • 相关阅读:
    算法
    如果业界中不用高级算法和数据结构,那为什么还要学?
    CentOS 7 运行级别切换
    ECharts笔记
    Vue+TypeScript学习
    TypeScript深入学习
    TypeScript基础
    检测数据类型的方法
    前端提高性能的方式
    柯里化
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9445742.html
Copyright © 2011-2022 走看看