zoukankan      html  css  js  c++  java
  • POJ 2377(最大生成树)

    http://poj.org/problem?id=2377

    题意:现在有一个人给人修建一些线路,(当然,我们想要少花钱消费,人家就想多多赚你的钱了,现在就给出这么一个问题)。让你求修得所有电路能赚取的最大利润,若电路不能被全部修完,输出“-1”.

    分析:最小生成树模板改一改就好啦~

    #include <stdio.h>
    #include <algorithm>
    #include <string.h>
    using namespace std;
    #define maxn 1100
    #define oo 0x3f3f3f3f
    int maps[maxn][maxn], dist[maxn], v[maxn];
    int n, m;
    
    
    int Prim()
    {
        memset(v, 0, sizeof(v));
    
        for(int i=1; i<=n; i++)
            dist[i] = maps[1][i];
            v[1] = 1;
    
        int sum = 0;
    
        for(int i=1; i<n; i++)
        {
            int index = -1, mins=-oo;
    
            for(int j=1; j<=n; j++)
            {
                if(!v[j] && dist[j]>mins)
                {
                    mins = dist[j];
                    index = j;
                }
            }
    
            if(mins == -1)  return -1;
    
            sum += mins;
            v[index] = 1;
    
            for(int j=1; j<=n; j++)
            {
                if(!v[j] && dist[j]<maps[index][j])
                    dist[j]=maps[index][j];
            }
        }
    
        return sum;
    }
    
    int main()
    {
        int a, b, c;
        scanf("%d %d", &n, &m);
    
        memset(maps, -1, sizeof(maps));
    
        for(int i=1; i<=m; i++)
        {
            scanf("%d %d %d", &a, &b, &c);
            maps[a][b] = maps[b][a] =max(maps[a][b], c);
        }
    
        int ans;
        ans = Prim();
    
        printf("%d
    ", ans);
    
        return 0;
    }
    View Code
  • 相关阅读:
    Java 课程设计:LWZ
    回溯法解骑士巡游问题
    2021.3.30 错误2
    2021.3.29 关于上下滚动
    2021.3.28 WebView的用法
    2021.3.27 关于错误1
    2021.3.26 Python创建表
    2021.3.25 人月神话阅读笔记06
    2021.3.24 个人作业第三阶段1
    2021.3.23 个人作业第三阶段
  • 原文地址:https://www.cnblogs.com/daydayupacm/p/5721824.html
Copyright © 2011-2022 走看看