洛谷P1536 村村通(java, 并查集)

news/2024/11/15 5:38:03/

链接:https://www.luogu.com.cn/problem/P1536

题目描述

某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?

代码:

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()) {//村庄数int num = sc.nextInt();if(num != 0) {UnionFind unionFind = new UnionFind(num);//路的数量int roads = sc.nextInt();for (int i = 0; i < roads; i++) {int x = sc.nextInt();int y = sc.nextInt();unionFind.union(x, y);}//最少建设的道路数量 -> 村中心数 - 1int min_roads = unionFind.sets() - 1;System.out.println(min_roads);}}}
}class UnionFind {HashMap<Integer, Integer> village;//集合数 -- 多少个村中心private int sets;public UnionFind(int n) {//初始化,视 每个村庄都是独立的(村中心)sets = n;village = new HashMap<>();for (int i = 1; i < n; i++) {village.put(i, null);}}public int findVillageCenter(int x) {int center = x;//找 村中心while (village.get(center) != null) {center = village.get(center);}//压缩路径 -- 登记村庄的村中心while (village.get(x) != null) {int old = village.get(x);village.put(x, center);x = old;}return center;}//将两个村中心 连通public void union(int x, int y) {int centerX = findVillageCenter(x);int centerY = findVillageCenter(y);if (centerX != centerY) {sets--;village.put(centerX, centerY);}}//返回村中心的数量public int sets() {return sets;}
}

http://www.ppmy.cn/news/241717.html

相关文章

题目 1536: 最长单词

题目 编写一个函数&#xff0c;输入一行字符&#xff0c;将此字符串中最长的单词输出。 输入仅一行&#xff0c;多个单词&#xff0c;每个单词间用一个空格隔开。单词仅由小写字母组成。所有单词的长度和不超过100000。如有多个最长单词&#xff0c;输出最先出现的。 输入 无…

hdu 1536

题目 &#xff1a;Problem - 1536 (hdu.edu.cn) #include<bits/stdc.h> using namespace std; int a[110],f[10010]; int k; int sg(int b){int t;bool g[10010]{0};for(int i0;i<k;i){tb-a[i];if(t<0){break;}if(f[t]-1){f[t]sg(t);}g[f[t]]1;}for(int h0;;h){i…

P1536 村村通(并查集)

村村通 - 洛谷https://www.luogu.com.cn/problem/P1536 #include <iostream> #include <cstdio> #include <string> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <cstring> #includ…

洛达1536u升级固件_华强北、洛达1562A、1562F、1562M、1536U、蓝汛、杰里、悦虎、阿德Air、阿德AirPods、小梁同学Mg、之终极PK...

关于洛达1562系列1562A、F、M三款芯片的全方位知识点解答 1.目前1562系列有A、F、M&#xff0c;正确的排序应该是A>F>M。 与1562F都是可以做降噪的&#xff0c;但是1562A是支持双麦双馈主动降噪&#xff0c;而1562F是只能支持单麦单馈。&#xff08;这里不难理解单麦单馈…

CF1536A Omkar and Bad Story

原题链接 题意 思路 如果是负数的话&#xff0c;那么肯定是no&#xff0c;因为是负数就会不断产生新数。 另外就全是YES&#xff0c;因为 a i a_i ai​ 的范围是100&#xff0c;而 b b b 数组&#xff0c;的范围是300&#xff0c;那么就直接输出 [ 0 , 299 ] [0, 299] [0,2…

TOJ 1536

题目标题: Accepted Necklace 题目连接: http://acm.tzc.edu.cn/acmhome/problemdetail.do?&methodshowdetail&id1536 题目类型: 动态规划 - 多维背包 数据结构: int dp[1005][25]; //重量 个数struct LMIC_PACK {int v, w; }; 思路分析: 比较典型的多维背包 一个维是…

org.gradle.jvmargs=-Xmx1536m

在家里将编译好的FFmpeg项目带到公司&#xff0c;打开android studio后&#xff0c;出现了问题提示如下的错误&#xff1a; 顿时虎躯一震&#xff0c;不会是又有问题了吧&#xff01;&#xff1f; 仔细一看&#xff0c;原来是初始化VM时&#xff0c;不能得到相应的足够的空间&a…

Java HotSpot(TM) 64-Bit Server VM warning: NewSize (1536k) is greater than the MaxNewSize (1024k)

看<<实战java虚拟机>>书&#xff0c;运行一个demo&#xff0c;然后报了以下的错误提示。 Java HotSpot™ 64-Bit Server VM warning: NewSize (1536k) is greater than the MaxNewSize (1024k). A new max generation size of 1536k will be used. 测试代码为&…