HDU 1863 畅通工程(最小生成树,prim)

 

 

题意:

  给出图的边和点数,要求最小生成树的代价,注:有些点之间是不可达的,也就是可能有多个连通图。比如4个点,2条边:1-2,3-4。

 

思路:

  如果不能连通所有的点,就输出‘?’。之前以为每个点只要有边连着就一定能生成树,其实还可以是每个点虽然有边可达,但是给的其实是两个图,比如上例。其他按照常规Prim。

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=105;
 4 const int mod=0x7f7f7f7f;
 5 int v[N][N];    //
 6 int vis[N];
 7 int low[N];     //到每个点的最小权
 8 
 9 
10 int prim(int n)
11 {
12     int pos=vis[1]=1;   //从点1开始
13     for(int i=2; i<=n; i++)   low[i]=v[1][i]; //目前到每个点的最小权
14     int ans=0;
15     for(int i=1; i<n; i++)  //搞定另外n-1个点
16     {
17         int big=mod;
18         for(int j=2; j<=n; j++) //找权最小的边
19         {
20             if(!vis[j] && low[j]<big )  //未浏览过,目前可达,权小
21             {
22                 pos=j;
23                 big=low[j];
24             }
25         }
26         if(big==mod)    return 0;   //无法到达。
27         ans+=big;
28         vis[pos]++; //浏览过
29         for( int j=2; j<=n; j++ )   //更新到每个点的权值
30             if(!vis[j] && v[pos][j]<mod && low[j]>v[pos][j] ) low[j]=v[pos][j];    //未浏览过,有路可达,更短
31     }
32     return ans;
33 }
34 
35 
36 
37 
38 int main()
39 {
40     freopen("input.txt", "r", stdin);
41     int n, m, a, b, t;
42     while(scanf("%d%d", &n, &m), n)
43     {
44 
45         memset(cnt,0,sizeof(cnt));
46         memset(vis,0,sizeof(vis));
47         memset(v,0x7f,sizeof(v));   //置为不可达
48 
49         for(int i=0; i<n; i++)
50         {
51             scanf("%d%d%d",&a,&b,&t);
52             v[a][b]=v[b][a]=t;
53         }
54         int ans=prim(m);
55         if(ans)    printf("%d\n",ans);
56         else  printf("?\n");
57     }
58     return 0;
59 }
AC代码

 

转载于:https://www.cnblogs.com/xcw0754/p/4608439.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2000年不算在21世纪

练习3-5 输出闰年 (15 分) 输出21世纪中截止某个年份以来的所有闰年年份。注意&#xff1a;闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。 想当然地以为21世纪是2000~2099&#xff0c;当然没有通过 if(N > 2000&&N < 2099){for(int i …

使用迭代器时如何避免ConcurrentModificationException

Java Collection类是快速失败的&#xff0c;这意味着如果在使用迭代器遍历某个线程的同时更改了Collection&#xff0c;则iterator.next&#xff08;&#xff09;将抛出ConcurrentModificationException 。 在多线程以及单线程环境下都可能出现这种情况。 让我们通过以下示例探…

Sublime Text 3实用快捷键大全

下面是我通过网上教程和文本资料学习sublime Text3时收集的一些实用功能和常用快捷键&#xff0c;现在分享出来&#xff0c;如果还有其它的好用的功能可以在下面留言&#xff0c;以便互相学习和交流&#xff0c;谢谢&#xff01;。 选择类 CtrlD 选中光标所占的文本&#xff0c…

Tomcat中配置JNDI数据源

准备工作&#xff1a; Tomcat版本&#xff1a;tomcat6.0以上 下例中均使用MySQL数据库 将对应数据源的jar包和MySQL的驱动包拷贝至tomcat的lib文件夹下 一、全局数据源 1步骤一&#xff1a;配置 在tomcat下的conf/server.xml的GlobalNamingResources节点标签中增加如下配置&…

练习3-8 查询水果价格 (15 分)

练习3-8 查询水果价格 (15 分) 给定四种水果&#xff0c;分别是苹果&#xff08;apple&#xff09;、梨&#xff08;pear&#xff09;、桔子&#xff08;orange&#xff09;、葡萄&#xff08;grape&#xff09;&#xff0c;单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公…

JavaFX 2.0 beta示例应用程序和思考

我有一段时间回过头来玩JavaFX&#xff0c;并且在使用该语言方面有好有坏的经验。 随着JavaFX 2.0 beta的发布&#xff0c;我想尝试一下。 在这里&#xff0c;我开发了一个简单的地址解析应用程序&#xff0c;该应用程序将使用Google地址编码API来获取地址并提供该位置的纬度-经…

$Android自定义控件在不同状态下的属性

在写代码的时候&#xff0c;有时候需要控件在不同状态下显示不同的外观&#xff0c;比如在按钮按下的时候要变颜色&#xff0c;EditText获取焦点时候边框要变颜色等。那么下面就来梳理一下这些是怎么实现的。 &#xff08;一&#xff09;按钮按下时候变颜色 1、在项目的drawabl…

解析DBR操作系统引导记录数据

理解文件系统。你必须要熟悉DBR&#xff0c;下面我们就来看看文件系统解析DBR数据。 Dos Boot Record(DBR)操作系统引导记录是由操作系统的格式化程序建立的。在文件系统驱动操作不论什么一个磁盘卷时&#xff0c;这一部分的信息将被读取并作为文件系统在这个磁盘卷上的參数被使…

简单冒泡排序

将5个数字按从小到大排序。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main() {int x[5] {0},temp 0;for(int i 0;i<5;i){scanf("%d",&x[i]);}//冒泡排序&#xff08;升序&#xff09;for(int j 0;j<4;j)//n个…

YouTube Java API入门

在本教程中&#xff0c;我将介绍Google的YouTube API &#xff0c;该API可让您使用YouTube的功能来启用应用程序。 YouTube是“杀手级”互联网应用程序之一&#xff0c;其流量占互联网总流量的很大一部分。 在开始之前&#xff0c;请确保您已阅读《 API概述指南》 。 我们将主…

mysql在mac上的坑

默认端口3306&#xff1f; 正确答案&#xff1a;3307 转载于:https://www.cnblogs.com/dudream/p/5375551.html

ServletContext图解

servlet之间共享数据资源&#xff01; 转载于:https://www.cnblogs.com/felixzh/p/4615902.html

C语言怎么输出百分号%

规律&#xff1a;printf函数中&#xff0c;当出现多个%时&#xff0c;由左至右&#xff0c;每两个%结合输出一个% #include <stdio.h> #include <stdlib.h> #include <math.h> int main() {int c 52;printf("% \n %% \n %%% \n %%%% \n %%%%% \n %%%%…

入侵Jasper以获取JSP页面的对象模型

为了对我的JSP进行一些检查和统计分析&#xff0c;我需要一个包含在其中的元素的类似于DOM的层次模型。 但是&#xff0c;解析JSP页面并不是一件容易的事&#xff0c;最好留给它一个出色的工具-Tomcat&#xff0c;Jetty&#xff0c;GlassFish以及其他所有工具都可以使用Jasper …

Linux自动化安装cobbler

1介绍 1.1 PXE PXE技术与RPL技术不同之处为RPL是静态路由&#xff0c;PXE是动态路由。RPL是根据网卡上的ID号加上其他记录组成的一个Frame&#xff08;帧&#xff09;向服务器发出请求。而服务器中已有这个ID数据&#xff0c;匹配成功则进行远程启动。PXE则是根据服务器端收到的…

iOS9适配系列教程

https://github.com/ChenYilong/iOS9AdaptationTips 转载于:https://www.cnblogs.com/zsw-1993/p/4879118.html

C语言形参

形参和实参区别 形参出现在函数定义中&#xff0c;在整个函数体内都可以使用&#xff0c;离开该函数则不能使用。实参出现在主调函数中&#xff0c;进入被调函数后&#xff0c;实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时&#xff0c;主调函数把实参…

避免延迟的JPA集合

Hibernate&#xff08;实际上是JPA&#xff09;具有集合映射&#xff1a; OneToMany&#xff0c; ManyToMany&#xff0c; ElementCollection。 所有这些默认情况下都是惰性的。 这意味着集合是List或Set接口的特定实现&#xff0c;其中包含对持久会话的引用&#xff0c;并且只…

2016年,我的和自己谈谈

2016年过去三分之一了&#xff0c;现在谈规划晚点但总比没想法强。想了半天还是从这个方面着手吧&#xff1a; 一.升级改造自己的办公学习环境&#xff1a; 给自己的电脑加内存&#xff0c;加SSD&#xff0c;再添置一个显示器&#xff0c;换上心仪已久的cherry青轴键盘&#xf…

C语言的四舍五入实现

习题3-2 高速公路超速处罚 (15 分) 按照规定&#xff0c;在高速公路上行使的机动车&#xff0c;达到或超出本车道限速的10%则处200元罚款&#xff1b;若达到或超出50%&#xff0c;就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。 输入格式: 输入在一行中…