首页 > 编程语言 >PIPOJ 惠民工程(prim算法求最小生成树)

PIPOJ 惠民工程(prim算法求最小生成树)

时间:2023-01-16 00:22:06浏览次数:64  
标签:居民点 index prim int 管道 惠民 PIPOJ ans

题目描述

市政府“惠民工程”的目标是在全市n个居民点间之架设煤气管道(但不一定有直接的管道相连,只要能间接通过管道可达即可)。很显然最多可架设 n(n-1)/2条管道,然而实际上要连通n个居民点只需架设n-1条管道就可以了。现请你编写程序,计算出该惠民工程需要的最低成本。

输入

测试输入包含若干测试用例。每个测试用例的第1行给出居民点数目M ( < =100 )、 评估的管道条数 N;随后的 N 行对应居民点间管道的成本,每行给出一对正整数,分别是两个居民点的编号,以及此两居民点间管道的成本(也是正整数)。为简单起见,居民点从1到M编号。

输出

对每个测试用例,在1行里输出全市管道畅通所需要的最低成本。若统计数据不足以保证畅通,则输出“?”。

样例输入

3 3
1 2 1
1 3 2
2 3 4
3 1
2 3 2

样例输出

3
?
#include<bits/stdc++.h>
using namespace std;
#define INF 0x7ffff
int a[105][105];
int vis[105];
int prim(int m,int n){//prim算法求最小生成树 
    int d[m];//存放到各个顶点的距离 
    int ans = 0;
    for(int i = 1; i <= m; i++){//初始化距离 
        d[i] = a[1][i];
    }
    vis[1] = 1; 
    for(int i = 2; i <= m; i++){//i=1开始不行,找m-1条边,需要m-1次循环,从1开始,则是m次循环 
        int min = INF;
        int index;
        for(int j = 1; j <= m; j++){
            if(!vis[j] && min > d[j]){
                min = d[j];
                index = j;
            }
        }
        if(min == INF){
            return -1;
        }
        vis[index] = 1;
        ans = ans + d[index];
        for(int j = 1; j <= m; j++){//更新距离 
            if(!vis[j] && d[j] > a[index][j]){
                d[j] = a[index][j];
            }
        }
    }
    return ans;
}
int main(){
    int m,n;
    while(scanf("%d%d",&m,&n)!=EOF){
        int x,y,z;
        for(int i = 1; i <= m; i++){
            for(int j = 1; j <= m; j++){
                if(i == j) a[i][j] = 0;
                else       a[i][j] = INF;
            } 
        }
        for(int i = 1; i <= m; i++){
            vis[i] = 0;
        }
        for(int i = 1; i <= n; i++){
            cin>>x>>y>>z;
            a[x][y]=a[y][x]=z;
        }
        int res = prim(m,n);
        if(res == -1) cout<<"?"<<endl;
        else          cout<<res<<endl;
    }
    return 0;
}

参考链接:(5条消息) 1004: 惠民工程_没被稻草压垮的骆驼的博客-CSDN博客

题目链接:PIPIOJ

 

标签:居民点,index,prim,int,管道,惠民,PIPOJ,ans
From: https://www.cnblogs.com/8023yyl/p/17054532.html

相关文章

  • 通关搜索和图论 day_16 -- Prim & Kruskal
    Prim先初始化距离,全部是正无穷,然后n次迭代,每次迭代执行:1.找到不在集合当中的距离最小的点(这里的集合是当前的生成树2.用这个点更新其他点到集合的距离举例,我们有......
  • PIPOJ 最短距离
    题目描述小王和小明是好朋友,两人最开始各有一个初始位置p和一个恒定速度v,从0时刻起开始,他们从初始位置以恒定速度开始行走,请告诉我行走过程中两人的最短距离是多少......
  • 【JS】Primitive类型是按值访问和存储在栈上的吗?
    0x01Immutable在讨论原始类型是否为按值访问和存储在栈上前,先要理解JS原始类型的一个特殊性质:immutable《JavaScript高级程序设计》中有一段对字符串的描述:ECMAScrip......
  • Cesium点击改变entity/primitives颜色与恢复原色(三)
    2023-01-08建筑物是primitives,两个娃娃是entity加载娃娃代码://粉色varentity6=viewer.entities.add({id:6,position:newCesium.Cartesia......
  • Android笔记--报错AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY in "cre
    问题描述每次一运行,APP程序必定闪退,百度了发现,闪退问题绝大多数就跟sql语句有关;看到控制台报出这样的错误:百度发现,我忘记了最初的知识点:在表里面,自动递增是在数据类型......
  • 靶场实战1-prime1
    本文知识交流学习心得,如果被拿去做违法乱纪的事情,请自行负责,与作者无关 一.信息收集Prime_1目标,获取靶机root权限开启之后,得到用户名victor,但是不知道密码(是需要我......
  • 红队渗透靶场之prime1.0(超详细!)
    靶场考察知识WordpressWordPress是一个免费的开源内容管理系统(CMS),可以用来创建和管理网站或博客。它是由PHP语言和MySQL数据库构建的,并且拥有大量的插件和主题,可以让您轻......
  • P1217 [USACO1.5]回文质数 Prime Palindromes
    题目题目描述因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以151是回文质数。写一个程序来找出范围[a,b](5<=a<b<=100,000,000)(一亿)间的......
  • Prime number 质数相关
    什么是质数?在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数,比如:2,3,5,7,11...什么是合数?比1大但不是素数的数称为合数。1和0既非素数也非合数。合数是......
  • Primavera Unifier -AEM 表单设计器要点
    在上一章介绍Unifier如何配置自定义报表中,未对如何设计报表模板进行太多描述,为了能更好的帮忙大家了解AEM(AdobeExperienceManager)或 AdobeLiveCycleDesigner的设计要点......