Friendly Group Gym - 102769F 2020(并查集)ccpc秦皇岛分站赛

题意:

n个学生要组成一个小组参加会议(可以不参加),
1.对于每两个朋友(x ,y),如果他们俩都参加会议,该小组的友好价值将会增加 1;如果其中只有一位参加会议,则该组的友好价值将降低 1。
3.如果n个学生参加会议,对团队的友好价值将降低n.

题目:

Professor Alex will organize students to attend an academic conference.

Alex has n excellent students, and he decides to select some of them (possibly none) to attend the conference. They form a group. Some pairs of them are friends.

The friendly value of the group is initially 0. For each couple of friends (x,y), if both of them attend the conference, the friendly value of the group will increase 1, and if only one of them attends the conference, the friendly value of the group will decrease 1. If k students attend the conference, the friendly value of the group will decrease k.

Alex wants to make the group more friendly. Please output the maximum friendly value of the group.

Input

The first line of the input gives the number of test cases, T (1≤T≤104). T test cases follow.

For each test case, the first line contains two integers n (1≤n≤3×105) and m (1≤m≤106), where n is the number of students and m is the number of couples of friends.

Each of the following m lines contains two integers xi,yi (1≤xi,yi≤n,xi≠yi), representing student xi and student yi are friends. It guaranteed that unordered pairs (xi,yi) are distinct.

The sum of n in all test cases doesn’t exceed 106, and the sum of m in all test cases doesn’t exceed 2×106.

Output

For each test case, output one line containing “Case #x: y”, where x is the test case number (starting from 1), and y is the maximum friendly value of the group.

Example

Input

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

Output

Case #1: 1
Case #2: 0

分析:

1.由题意,友好价值=组群里的边数-点数;
2.那么怎么求最大友好价值?由于对于每两个朋友(x ,y),如果他们俩都参加会议,该小组的友好价值将会增加 1;如果其中只有一位参加会议,则该组的友好价值将降低 1,所以我们用并查集,直接找根节点遍历到最后,这时就变成了一个个的组群,我们只要判断这些组群是否参加会议即可,当组群里的边数-点数<0时,不让其参加,反之参加即可求得。

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int M=3e5+10;
int t,n,m,k,ans;
int f[M],a[M],b[M];
int getf(int x){if(f[x]==x) return  x;return f[x]=getf(f[x]);
}
int main(){cin>>t;k=0;while(t--){cin>>n>>m;for(int i=1;i<=n;i++){f[i]=i;a[i]=0;//记录边,起始边个数为零。b[i]=1;//记录点,原始本身就为一个点。}for(int i=1;i<=m;i++){int t1,t2;scanf("%d%d",&t1,&t2);int u=getf(t1);int v=getf(t2);if(u==v) a[u]++;else {f[v]=u;a[u]+=a[v]+1;//因为最终怕判断的根节点判组群,所以记录边和点只需要在根节点上即可。b[u]+=b[v];}}ans=0;for(int i=1;i<=n;i++){if(i==f[i]&&a[i]-b[i]>0)ans+=a[i]-b[i];}printf("Case #%d: %d\n",++k,ans);}return 0;
}

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

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

相关文章

测试人员未来的3条出路

大家好&#xff0c;我是Z哥。前两天有个做测试的小伙伴加我微信问我测试相关的一些事情。她自己是从学习毕业就开始进入到互联网行业做测试的&#xff0c;到现在三年工作经验。她现在都不太敢跳槽&#xff0c;因为觉得自己没有什么核心竞争力&#xff0c;平常就是点点鼠标&…

[JavaWeb-MySQL]DQL_查询表中记录,语句

DQL&#xff1a;查询表中的记录 * select * from 表名;1. 语法&#xff1a;select字段列表from表名列表where条件列表group by分组字段having分组之后的条件order by排序limit分页限定2. 基础查询1. 多个字段的查询select 字段名1&#xff0c;字段名2... from 表名&#xff1b…

团体程序设计天梯赛-练习集L1-025 正整数A+B (15分)(getline输入)

题目&#xff1a; 题的目标很简单&#xff0c;就是求两个正整数A和B的和&#xff0c;其中A和B都在区间[1,1000]。稍微有点麻烦的是&#xff0c;输入并不保证是两个正整数。 输入格式&#xff1a; 输入在一行给出A和B&#xff0c;其间以空格分开。问题是A和B不一定是满足要求…

自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧

一&#xff1a;背景1. 讲故事曾今在项目中发现有同事自定义结构体的时候&#xff0c;居然没有重写Equals方法&#xff0c;比如下面这段代码&#xff1a;static void Main(string[] args){var list Enumerable.Range(0, 1000).Select(m > new Point(m, m)).ToList();var ite…

[JavaWeb-MySQL]DDL_操作数据库,表

DDL:操作数据库、表 1. 操作数据库&#xff1a;CRUD1. C(Create):创建* 创建数据库&#xff1a;* create database 数据库名称;* 创建数据库&#xff0c;判断不存在&#xff0c;再创建&#xff1a;* create database if not exists 数据库名称;* 创建数据库&#xff0c;并指定…

Division CodeForces - 1445C(数论因子相关)

题意&#xff1a; 找一个最大的数X&#xff0c;使p%x0且x%q!0&#xff0c;题目保证至少有一个答案满足题意。 题目&#xff1a; Oleg’s favorite subjects are History and Math, and his favorite branch of mathematics is division. To improve his division skills, O…

使用 Windows Terminal 连接远程主机

使用 Windows Terminal 连接远程主机IntroWindows Terminal 是微软新推出来的一个全新的、流行的、功能强大的命令行终端工具。包含很多来社区呼声很高的特性&#xff0c;例如&#xff1a;多 Tab 支持、富文本、多语言支持、可配置、主题和样式&#xff0c;支持 emoji 和基于 G…

[JavaWeb-MySQL]DML_操作表

DML&#xff1a;增删改表中数据 1. 添加数据&#xff1a;* 语法&#xff1a;* insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);* 注意&#xff1a;1. 列名和值要一一对应。2. 如果表名后&#xff0c;不定义列名&#xff0c;则默认给所有列添加值insert into …

.Net Core实现区块链初探

区块链这么火&#xff0c;咱也跟个风。一、前言最近&#xff0c;银行总行关于数字货币即将推出的消息频传&#xff0c;把BTC也带得来了一波反弹。借着这个风&#xff0c;我们也研究一下区块链。通常大家说到区块链&#xff0c;实际包括两部分概念&#xff1a;第一个概念&#x…

Divide and Sum CodeForces - 1445D(排列组合+逆元)

题意&#xff1a; 给定一个长度为2n的数组&#xff0c;将数组分成两个长度为n的数组p,q&#xff0c;将p从小到大排序&#xff0c;将q从大到小排序&#xff0c;对于每种分法&#xff0c;f(p,q)∑i1n\sum_{i1}^{n}∑i1n​|xi−yi|.求总和 题目&#xff1a; You are given an a…

[Java基础]自定义注解之属性定义

代码如下: package AnnoDemo01;public enum Person {p1,p2; }package AnnoDemo01;public interface MyAnno2 {}package AnnoDemo01;public interface MyAnno {int show1();String show2();Person per();MyAnno2 ann02();String[] strs(); }定义了属性&#xff0c;在使用时需要…

微软开源 Tye 项目,可简化微服务开发

微软近期开源了一款开发人员工具 Tye&#xff0c;能够用于简化微服务以及分布式应用程序的开发、测试以及部署过程。项目地址&#xff1a;https://github.com/dotnet/tye。该项目负责人 Amiee 表示&#xff0c;在构建由多个项目组成的应用程序时&#xff0c;开发者通常希望能够…

Subset POJ - 3977(折半枚举+二分+二进制枚举)

题意&#xff1a; 给你一个集合N&#xff08;N<35&#xff09;,问集合的子集&#xff0c;除了空集&#xff0c;使得自己中所有元素和的绝对值最小&#xff0c;若存在多个值&#xff0c;那么选择子集中元素最少的那个。 题目&#xff1a; Given a list of N integers with…

.NET内存管理五大基础知识

1.小对象怎么处理的&#xff1f;小型.NET对象被分配到小型对象堆&#xff08;SOH&#xff09;上。其中有3种&#xff1a;第0代&#xff0c;第1代和第2代。对象根据其寿命向上移动。将新对象放在Gen 0上。当Gen 0充满时&#xff0c;.NET垃圾收集器&#xff08;GC&#xff09;运行…

L1-046 整除光棍 (20分)(模拟除法竖式求商的位运算)

题目&#xff1a; 这里所谓的“光棍”&#xff0c;并不是指单身汪啦~ 说的是全部由1组成的数字&#xff0c;比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如&#xff0c;111111就可以被13整除。 现在&#xff0c;你的程序要读入一个整数x&#…

Sql Server之旅——第十站 简单说说sqlserver的执行计划

我们知道sql在底层的执行给我们上层人员开了一个窗口&#xff0c;那就是执行计划&#xff0c;有了执行计划之后&#xff0c;我们就清楚了那些烂sql是怎么执行的&#xff0c;这样 就可以方便的找到sql的缺陷和优化点。一&#xff1a;执行计划生成过程说到执行计划&#xff0c;首…

【半译】扩展shutdown超时设置以保证IHostedService正常关闭

我最近发现一个问题&#xff0c;当应用程序关闭时&#xff0c;我们的应用程序没有正确执行在IHostedService中的StopAsync方法。经过反复验证发现&#xff0c;这是由于某些服务对关闭信号做出响应所需的时间太长导致的。在这篇文章中&#xff0c;我将展示出现这个问题的一个示例…