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
  • 相关阅读:
    mysql免安装使用(win7 64位系统)
    [NOIP2011]瑞士轮
    [NOIP2011]数的划分
    [洛谷2994]超级弹珠
    并查集
    [codevs1073]家族
    快速幂
    [NOI2002]银河英雄传说
    [NOIP2007]矩阵取数游戏
    [洛谷2415]集合求和
  • 原文地址:https://www.cnblogs.com/daydayupacm/p/5721824.html
Copyright © 2011-2022 走看看