njupt 社团吞并
来源:互联网 发布:山东省卫计委官网通知 编辑:程序博客网 时间:2024/05/17 04:01
C. 社团吞并
某段时间社会上流行企业收购,而南邮也受此社会风气影响,各个社团到处想着吞并其它社团,以实现扩张势力范围且梦想着统治南邮社团,于是,凶残的
“社团吞并风波”就是这样开始了...
已知每个社团有两个个属性:势力,标签。 势力代表一个社团的强大能力,任何一个社团只能吞并势力比它小的社团。标签代表该社团是属于什么类型的>,一个社团可以有多个标签,如传媒科协有“技术类”,“艺术类”等标签,任意两个社团只有当他们有某一个相同的标签时才能发生吞并。
下面C天每天有一次谈判(A,B),表示编号为A的社团和社团B谈判,谈判规则如下:
(1)若A,B某一方满足把另一方吞并的所有条件,强大的一方s就会毫不犹豫地把弱的一方x吞并掉,并且把x吞并过的社团也全部纳入自己的麾下。
(2)在满足(1)的条件下,若弱的一方x原本属于某个社团y,则此时x会叛变y,让自己以及自己麾下的社团全都投靠社s。
如(3, 4)表示社团编号为3 和 4谈判,若社4的势力比社3强,且他们有某一个相同的标签,则现在社3以及社3吞并的社团全部都属于社4。
之后若有(2, 3)谈判,则社团3还是以原来的势力值和标签做条件,并且若社2被3吞并了,则社2也会属于社4.
再之后若有(3, 5)谈判,社5能吞并社3,则社3会背叛社4,带领自己的小社团们投靠社5,但它的原boss社4依然不变。
问在“南邮社团吞并风波”结束后每个社团的总boss的编号,也就是最终属于那个社团。
Input :
三个整数n,m,C(n <= MAXN, m <= 60). n表南邮的社团数,分别用编号1..n来表示(最开始时社i属于社i,这个叙述有点绰,就是自己属于自己)。m>表示总的标签个数,用1~m编号。
接下来n行,每一行首先两个整数pi, li, 分别表编号为i的社团势力值和标签个数。之后有li个整数b1,b2,...,bli(1 <= bk <= m, 1 <= k <= li)表>社团i所属的标签。
接下来C行,第i行表第i天的一个谈判Ai,Bi(1 <= Ai,Bi <= n)。
Output :
某段时间社会上流行企业收购,而南邮也受此社会风气影响,各个社团到处想着吞并其它社团,以实现扩张势力范围且梦想着统治南邮社团,于是,凶残的
“社团吞并风波”就是这样开始了...
已知每个社团有两个个属性:势力,标签。 势力代表一个社团的强大能力,任何一个社团只能吞并势力比它小的社团。标签代表该社团是属于什么类型的>,一个社团可以有多个标签,如传媒科协有“技术类”,“艺术类”等标签,任意两个社团只有当他们有某一个相同的标签时才能发生吞并。
下面C天每天有一次谈判(A,B),表示编号为A的社团和社团B谈判,谈判规则如下:
(1)若A,B某一方满足把另一方吞并的所有条件,强大的一方s就会毫不犹豫地把弱的一方x吞并掉,并且把x吞并过的社团也全部纳入自己的麾下。
(2)在满足(1)的条件下,若弱的一方x原本属于某个社团y,则此时x会叛变y,让自己以及自己麾下的社团全都投靠社s。
如(3, 4)表示社团编号为3 和 4谈判,若社4的势力比社3强,且他们有某一个相同的标签,则现在社3以及社3吞并的社团全部都属于社4。
之后若有(2, 3)谈判,则社团3还是以原来的势力值和标签做条件,并且若社2被3吞并了,则社2也会属于社4.
再之后若有(3, 5)谈判,社5能吞并社3,则社3会背叛社4,带领自己的小社团们投靠社5,但它的原boss社4依然不变。
问在“南邮社团吞并风波”结束后每个社团的总boss的编号,也就是最终属于那个社团。
Input :
三个整数n,m,C(n <= MAXN, m <= 60). n表南邮的社团数,分别用编号1..n来表示(最开始时社i属于社i,这个叙述有点绰,就是自己属于自己)。m>表示总的标签个数,用1~m编号。
接下来n行,每一行首先两个整数pi, li, 分别表编号为i的社团势力值和标签个数。之后有li个整数b1,b2,...,bli(1 <= bk <= m, 1 <= k <= li)表>社团i所属的标签。
接下来C行,第i行表第i天的一个谈判Ai,Bi(1 <= Ai,Bi <= n)。
Output :
一行有n个数,第i个数表社团i在风波结束后属于的社团编号。
/* 简单并查集。 注意,因为有“背叛”,而且是带小弟背叛这么一说,所以在“并操作”的时候不能压缩路径! 到最后输出序列的时候才压缩路径。 压缩路径的正确性的成立是建立在这么一个条件上的:两个元素并在一个集合之后,那后面它们都会在同一个集合里。 但是这里的“背叛”因素不符合上述条件,两个社团可能原来属同一大boss社,但是有可能某一个会被其它社团挖墙角,背叛出去。 判断标签是否有某一个相同,若是直接遍历法比较的话可能会超时。需要用到位运算,因为 m < 60,我们可以用一个long long来模拟一个社团的标签label[i],若i社具有标签k,则label[i]的二进制的第k-1个位置是1.*/#include <stdio.h>#define MAXN 100005#define MAXM 60int n, m, C;long long label[MAXN];int power[MAXN], father[MAXN];void check_and_move(int x, int y) { if(!(label[x] & label[y])) return ; if(power[x] > power[y]) father[y] = x; else if(power[x] < power[y]) father[x] = y;}int find(int x) { return x == father[x] ? x : father[x] = find(father[x]);}int main(){ int l, x, y; scanf("%d%d%d", &n, &m, &C); for(int i = 1; i <= n; i++) { scanf("%d%d", &power[i], &l); while(l--) { scanf("%d", &x); label[i] |= (1LL << x); } } for(int i = 1; i <= n; i++) father[i] = i; while(C--) { scanf("%d%d", &x, &y); check_and_move(x, y); } for(int i = 1; i <= n; i++) printf("%d%c", find(i), i == n ? '\n' : ' '); return 0;}
- njupt 社团吞并
- 南邮 OJ 2025 社团吞并
- njupt Keroro侵略地球
- njupt 1581 筷子 DP
- acm.njupt--1983
- acm.njupt--2026
- acm.njupt--1859
- acm.njupt--2027
- acm.njupt--2008
- acm.njupt--1882
- 筷子 - NJUPT 1851 dp
- From NJUPT to Oracle
- NJUPT ACM 合法日期
- njupt-1134-Christmas
- njupt-胜负问题||
- 字符串排序--acm.njupt
- 第几天--acm.njupt
- njupt Java 实验1
- Gentoo: NFS/RDMA (Infiniband)
- 秋天是鲜红色的shooow
- MFC消息循环和消息泵
- Linux 下编译安装OpenCV
- windows7 安装node.js
- njupt 社团吞并
- 【心路】一位新手沫沫的IOS学习之旅(该作者是女攻城师噢)
- c语言要点摘录(29~32 内存管理的艺术)
- 快速排序和快速选择
- njupt Keroro侵略地球
- java中文名排序
- linux c 编程入门练习题
- linux内核 模块加载并查看信息
- ios国际化