C: City----逆向并查集

C: City

时间限制: 1 s      内存限制: 128 MB     

题目描述

       如果城市A和城市B互通,城市B和城市C互通,那么城市A和城市C也互通,A、B、C三个城市算一个聚集点。先已知有n个城市和m条道路,想求的是有几个聚集点?但小S觉得太简单了,由于战争原因,某些城市会被导弹销毁掉,与之相应的道路也变得不可用。之前已经被销毁的不会被复原。现给定每次销毁的城市顺序,求每次销毁后聚集点有多少个。

输入

第一行输入n

m,表示城市数量和道路数量(1n1041m2n)

接下来m

行,每行输入两个数aibi (1ai,bin)

。表示ai和bi直接有道路

m+2

行输入q,表示有q个城市会被销毁 (1qn)

接下来输入q

个数,每行输入一个不重复的数,表示被销毁的城市

输出

输出一行q个数,每i个数表示第i个城市销毁后聚集点的数量

样例输入

8 9
1 2
1 3
1 6
2 4
3 6
4 5
4 7
5 7
5 8
4
3 2 5 4

样例输出

1 2 3 3
 
#include<iostream>
#include<string.h>
#include<math.h>
#define ll long long
using namespace std;
int a[100005], b[100005], c[100005], p[100005], ans[100005], vis[100005], r[100005];
int n, m, t = 0, cnt;
void init()//初始化集合,每个元素的根节点都是自己
{for (int i = 1; i <= n; i++){p[i] = i;}
}int find(int x)//查找元素x的根节点是谁
{if (x == p[x])return x;elsereturn p[x] = find(p[x]);
}void join(int x, int y)//合并两个集合
{int xRoot = find(x);int yRoot = find(y);if (xRoot == yRoot) //根节点相同,不合并return;if (r[xRoot] < r[yRoot]) //r[i]是元素i所在树的高度,矮树的根节点认高树的根节点做根节点p[xRoot] = yRoot;else if (r[xRoot] > r[yRoot])p[yRoot] = xRoot;else{p[yRoot] = xRoot;//树高相同,做根节点的树高度要加一r[xRoot]++;}
}
void num()//求不同子集个数
{for (int i = 1; i <= n; i++)//有多少个p[i]==i,就有多少个子集
    {if (p[i] == i && vis[i] == 0)t++;}
}
bool sameRoot(int x, int y)//查询两个元素的老板是否相同
{return find(x) == find(y);
}
int main()
{scanf("%d%d", &n, &m);init();cnt = n;//当元素各不相连的时候,有n个集合for (int i = 1; i <= m; i++){scanf("%d%d", &a[i], &b[i]);}int k;scanf("%d", &k);for (int i = 1; i <= k; i++){scanf("%d", &c[i]);vis[c[i]] = 1;}for (int i = 1; i <= m; i++){if (vis[a[i]] == 0 && vis[b[i]] == 0)join(a[i], b[i]);}num();int base = t;//销毁所有c[i]元素之后可以构成几个子集cnt = base;ans[k + 1] = base;for (int i = k; i >= 1; i--){vis[c[i]] = 0;cnt = cnt + 1;ans[i] = cnt;for (int j = 1; j <= m; j++){if (a[j] == c[i] && vis[b[j]] == 0){if (sameRoot(a[j], b[j]))ans[i] = cnt;else{join(a[j], b[j]);{cnt = cnt - 1;ans[i] = cnt;}}}if (b[j] == c[i] && vis[a[j]] == 0){if (sameRoot(a[j], b[j]))ans[i] = cnt;else{join(a[j], b[j]);{cnt = cnt - 1;ans[i] = cnt;}}}}}for (int i = 2; i <= k + 1; i++){printf("%d", ans[i]);if (i != k + 1)printf(" ");}printf("\n");//system("pause");return 0;
}

 

相似题目:https://www.cnblogs.com/-citywall123/p/10719924.html



转载于:https://www.cnblogs.com/-citywall123/p/10729243.html

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

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

相关文章

java menu字体_Java开发网 - 请问如何让菜单字体变宋体?

Posted by:scottdingPosted on:2003-01-23 12:44贴出了大部分&#xff0c;你看看想改什么吧。Font font new Font("宋体",Font.PLAIN,14);UIManager.put("Button.font",font);UIManager.put("ToggleButton.font",font);UIManager.put("Rad…

Java8中 Parallel Streams 的陷阱 [译]

转载自https://www.cnblogs.com/imyijie/p/4478074.html Java8 提供了三个我们渴望的重要的功能:Lambdas 、 Stream API、以及接口的默认方法。不过我们很容易滥用它们甚至破坏自己的代码。 今天我们来看看Stream api&#xff0c;尤其是 parallel streams。这篇文章概述了其中的…

自定义消息提示框

使用原生JavaScript简单封装的一个消息提示模态框&#xff0c;如果谁有更好的方式可以分享&#xff0c;谢谢&#xff01; <!DOCTYPE html> <html lang"en"><head><title></title><meta charset"UTF-8"><meta name&…

ObjectStreamClass:监视Java对象的序列化

ObjectStreamClass可以是有用的类&#xff0c;用于分析JVM中加载的序列化类的序列化特征。 这篇文章介绍了此类提供的有关已加载序列化类的一些信息。 ObjectStreamClass提供了两个用于查找类的静态方法&#xff1a; lookup&#xff08;class&#xff09;和lookupAny&#xff…

@Transcational特性

捕获RuntimeException捕获Error并不捕获Checked Exception在方法中使用Transcational注解时候&#xff0c;通过throw new Exception&#xff08;&#xff09;&#xff0c;在发生异常的时候不会进行回滚&#xff0c;可以使用throw new RuntimeException&#xff08;&#xff09;…

SpringBoot集成Thymeleaf前端模版

1、在application.properties配置文件中添加 thymeleaf 的配置信息 spring.datasource.driverClassNamecom.mysql.jdbc.Driver spring.datasource.urljdbc:mysql://localhost:3306/test spring.datasource.usernameroot spring.datasource.passwordrootspring.thymeleaf.modeHT…

00005在java结果输出_Java-005-运算符详解

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言Java也提供了套丰富的运算符来操纵变量, 可以把运算符分成以下几组算术运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、其他运算符。①算术运算符用在数学表达式中它们的作用和在数学中的作用一样 表格中的…

spring data jpa 分页查询

法一&#xff08;本地sql查询,注意表名啥的都用数据库中的名称&#xff0c;适用于特定数据库的查询&#xff09; public interface UserRepository extends JpaRepository<User, Long> {Query(value "SELECT * FROM USERS WHERE LASTNAME ?1",countQuery &…

Python之递归

递归的意思是函数自己调用自己。递归次数&#xff1a;递归如果是死循环&#xff0c;最多执行999次。count0 def say():global countcount1print(say)print(count)say()say() #结果&#xff1a; # say # 1 # ... # say # 997 # say # RecursionError: maximum recursion depth e…

使用CDI的InjectionPoint注入配置值

依赖注入是用于组织类依赖的一项出色技术。 当前类中需要的所有类实例都是在运行时从DI容器提供的。 但是您的配置呢&#xff1f; 当然&#xff0c;您可以创建一个“ Configuration”类&#xff0c;并在需要它的任何地方注入该类&#xff0c;并从中获取必要的值。 但是CDI允许…

LOJ.6435.[PKUSC2018]星际穿越(倍增)

LOJBZOJ 参考这儿qwq。 首先询问都是求&#xff0c;向左走的最短路。\(f[i][j]\)表示从\(i\)走到\(j\)最少需要多少步。表示这样只会\(O(n^2\log n)\)的 但是感觉能卡过\(70\)分。 注意到从\(i\)出发&#xff0c;走\(j\)步能到达的点都是一段一段的。所以不妨令\(f[i][j]\)表示…

java setsession_Java Session.setServerAliveInterval方法代码示例

import com.jcraft.jsch.Session; //导入方法依赖的package包/类private Session startNewSession(boolean acquireChannel) throws JSchException, InterruptedException {Session newSession null;final AtomicBoolean cancelled new AtomicBoolean(false);ConnectingProgr…

鼠标拖动改变DIV等网页元素的大小的最佳实践

1.初次实现 1.1 html代码 <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"en" lang"en"><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>div change wid…

[WC2006]水管局长

水管局长 题目链接&#xff1a;https://www.luogu.org/problemnew/show/P4172#sub LCT 显然两个点的路径上的边最大要最小在该图最小生成树上 正删倒加&#xff0c;倒着做变成加边操作 加边时判断一下是否能形成更优的生成树&#xff0c;用LCT删除和连接操作即可 1 #include<…

JDBC 4.0鲜为人知的Clob.free()和Blob.free()方法

在会议上谈论jOOQ时&#xff0c;我总是展示此幻灯片&#xff0c;其中包含许多人们经常犯的非常常见的JDBC错误&#xff1a; 此图中的六个常见的JDBC错误 您可以找到错误吗&#xff1f; 其中一些是显而易见的&#xff0c;例如&#xff1a; 第4行&#xff1a;由于第3行的连接…

反沙箱——SetErrorMode

目录 1.前言 2.原理讲解 3.代码实现 4.参考 1.前言 利用SetErrorMode进行反沙箱的技术&#xff0c;在2010年就有被提出&#xff0c;但是之前搜了很久都没有相关内容&#xff0c;这里简单的说一下这个反沙箱的实现。反沙箱参考GandCrab5.2。 2.原理讲解 首先讲一下SetErrorMode这…

bat java 启动脚本_从bat脚本运行的Java应用程序上的Windows关闭挂钩

小编典典在极少数情况下&#xff0c;虚拟机可能会中止&#xff0c;即在不完全关闭的情况下停止运行。当虚拟机在外部终止时会发生这种情况&#xff0c;例如在Unix上使用SIGKILL信号或在MicrosoftWindows上使用TerminateProcess调用。因此&#xff0c;不幸的是&#xff0c;我认为…

C89和C99区别--简单总结

&#xff08;1&#xff09;对数组的增强 可变长数组  C99中,程序员声明数组时,数组的维数可以由任一有效的整型表达式确定,包括只在运行时才能确定其值的表达式,这类数组就叫做可变长数组,但是只有局部数组才可以是变长的.可变长数组的维数在数组生存期内是不变的,也就是说,可…

四、spring boot 1.5.4 日志管理

spring boot日志默认采用logback进行输出&#xff0c;你可以对logback进行定制化&#xff0c;方法如下&#xff1a; 在resources文件夹下建立logback.xml配置文件 <?xml version"1.0" encoding"UTF-8"?> <configuration><!-- base.xml i…

使用MyBatis和Spring构建Java Web应用程序

这篇文章将展示如何在Spring环境中使用带有MyBatis框架的MYSQL DB创建学生注册应用程序。 这是一个简单的应用程序&#xff0c;旨在在注册期间从用户收集输入详细信息&#xff0c;将详细信息保存在MYSQL DB中&#xff0c;并在登录期间对它们进行身份验证。 1.使用Maven模板创建…