【天梯选拔月赛】参与者人数(并查集模版题!remember find_father写法!)
题目:
临沂大学有很多社团,一个学生可能会加入多个社团。为了活跃大学生业余生活,增强体育运动积极性,临沂大学读书社团决定举行大学生跳绳比赛,要求该社团成员必须参加。为了扩大影响,要求只要其他社团有一个人参加,那么该社团中的每一个人都必须参加。求参加比赛至少多少人?
输入格式:
输入第一行包含两个整数n和m,n(0 < n <= 30000)表示学生的数目,m(0 <= m <= 500)表示社团的数目。每个学生都有一个唯一的编号,编号取值为0到n-1,编号为0的社团是读书社团。 接下来有m个社团的名单,每个社团的名单在输入中为一行。每一行先输入一个数k表示社团总人数。接着是社团中k个成员的编号。
输出格式:
输出一个数占一行,表示参加比赛的总人数。
输入样例:
100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
输出样例:
4
解题思路:
并查集,注意要让同一个集合内的所有结点的父亲直接指向集合的根,否则find_father起来会有很多重复的操作,超时!!
更新find_father(int x)的写法:
原写法:
int findfather(int x)
{while(x!=father[x])x=father[x];return x;
}
新的写法:!!!
int find_father(int x)
{int fx = father[x];return x == fx ? x : father[x] = find_father(fx);
}
Union函数能不调用尽量不调用,否则会段溢出或者超时!
ac代码:
#include <bits/stdc++>
#define maxn 30005
#define inf 0x3fffffff
using namespace std;
typedef long long ll;
int father[maxn];
int find_father(int x)
{int fx = father[x];return x == fx ? x : father[x] = find_father(fx);
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);int n,m,k,t,x,c,ans=0,vis[maxn];memset(vis,0,sizeof(vis));scanf("%d %d",&n,&m);for(int i=0;i<n;i++)father[i]=i;for(int i=0;i<m;i++){scanf("%d %d",&k,&x);int fx=find_father(x);vis[x]=1;if(i==0) t=x;for(int j=1;j<k;j++){scanf("%d",&c);vis[c]=1;int fc=find_father(c);if(fc!=fx)//main内写,避免调用,超时father[fc]=fx;}}int ft=find_father(t);for(int i=0;i<n;i++)if(vis[i]){if(ft==find_father(i))ans++;}printf("%d\n",ans);return 0;
}
【天梯选拔月赛】参与者人数(并查集模版题!remember find_father写法!)相关推荐
- 畅通工程(并查集模版题)
题意: 多组输入N,M,当N为0退出人输入,N是道路数目,M是村庄总数,随后N行,每行输入三个数两个村庄的编号,以及连接这两个村庄的费用. 对每一组数据输出畅通工程的最低费用,如果不能畅通就输出&qu ...
- PAT题解-1118. Birds in Forest (25)-(并查集模板题)
如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...
- 【SCAU 新生赛】18247 aler的旅游计划 并查集模板题
18247 aler的旅游计划 该题有题解 时间限制:1000MS 代码长度限制:10KB 提交次数:15 通过次数:0 收入:10 题型: 编程题 语言: 不限定 Description aler想 ...
- 战争来临(并查集模板题)
战争来临(并查集模板题) 描述 那一个骑单车卖报纸的少年 恐慌的眼泪慢慢布满了侧脸----<战争世界> B国对A国发动了侵略战争,A国不得不全力抵御.A国幅员辽阔,后方群众的支援补 ...
- 并查集模板题(stl 中map的运用)
DongDong认亲戚 DongDong每年过春节都要回到老家探亲,然而DongDong记性并不好,没法想起谁是谁的亲戚(定义:若A和B是亲戚,B和C是亲戚,那么A和C也是亲戚),她只好求助于会编程的 ...
- [NOI2002] 银河英雄传说(带权并查集好题)
题解: 用两个变量来维护: 1.sz[i]维护第i列元素的个数 2.pre[x]维护第x元素到当前队首的距离. 在并查集是不断维护这两个值. 至于如何维护看下图和文字解释 当然,这样维护还是不够的,对 ...
- 【算法】并查集刷题总结
目录 P1396 营救 题目描述 "咚咚咚--""查水表!"原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门-- 妈妈下班回家, ...
- How Many Answers Are Wrong HDU - 3038(带权并查集经典题,满满的都是注释)
How Many Answers Are Wrong HDU - 3038 点击打开链接 题意:现在有n个数(你并不知道这n个数是什么),m次查询,每次查询给出u,v,w.表示从第u个数到第v个数的 ...
- 【模板】并查集 两种路径压缩写法(类模板和函数模板)
并查集函数模板写法: #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MAX_N 1 ...
- 【POJ - 1182】 食物链(附超详细讲解)(并查集--种类并查集经典题)
题干: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. ...
最新文章
- python分类算法_用Python实现KNN分类算法
- 内存稳定性测试_内存条选择两条8G还是单条16G?通过对比浅谈该如何选择
- Docker Registry本地私有仓库搭建
- SpringBoot从入门到精通教程
- 越混越差的十个原因,看看你有没有?
- 对比会声会影与剪映哪个制作转场效果更专业
- 关于KX混响插件:REVERB R详解
- 在python中datetime使用中如何识别上月同期日期
- mayapython常用模块_Maya入门之在Maya 中使用 Python 的基础知识有那些
- 东数西算,浪潮云在枢纽节点提供服务
- 使注册用户名时不能包含特殊符号
- 二十九、K8s最小服务漏洞3-gVisor沙箱
- 判断二叉树是否是平衡二叉树
- C++字符,字符串,数字,小写,大写的相互转化
- 维度表和事实表的含义
- DebugView 简单使用
- 具体的数据库存储过程的编写
- RPA-艺赛旗iS-RPA Studio 9.0 Beta 现已发布
- 1-丁基-3-甲基咪唑双三氟甲基磺酰亚胺([BMIm] NTf2)离子液体修饰Ni镍纳米颗粒的介绍
- 海蜘蛛软路由-转载收藏
热门文章
- ubuntu shell 直接输入密码
- unity使用屏幕后处理实现闪烁特效,创建新的shader文件过程
- python xpath爬虫_[爬虫]python下的xpath清洗数据之html数据清洗
- python语言数值操作符_Python之组合数据类型、逻辑操作符、控制流语句、算术操作符...
- php printf 和sprintf,深入浅析php中sprintf与printf函数的用法及区别
- python reduce函数怎么用_python内置函数reduce
- JavaScript中字符串相关总结(附实例)
- RecyclerView Widget 使用
- RestTemplate 发送文件
- ADO.NET 数据库操作类