[BZOJ1370][Baltic2003]Gang团伙 并查集+拆点
Description
Input
Output
Sample Input
4
E 1 4
F 3 5
F 4 6
E 1 2
Sample Output
HINT
{1},{2,4,6},{3,5}
Solution
做法:并查集+拆点
朋友的朋友是我的朋友很好解决,直接并掉两个集合
关键是敌人的敌人就是我的朋友。
这个条件用拆点来解决
假设$x,y$敌对,将$x$和$y+n$这两个集合还有$y$,$x+n$这两个集合并起来就可以了
为什么要这样呢?
假设$a,b$为敌,$b,c$为敌,这样就可以把$a,c$并起来了
另外要注意细节,比如初始化$f[i]$要$for$到$2n$,跑完$m$个关系后要再重新跑一遍
#include <bits/stdc++.h> using namespace std ; #define N 5000 int n , m ;
int f[ N ] , a[ N ] ; int find( int x ) {
if( f[ x ] == x ) {
return x ;
}return f[ x ] = find( f[ x ] ) ;
} int main() {
scanf( "%d%d" , &n , &m ) ;
for( int i = ; i <= * n ; i ++ ) f[ i ] = i ;
for( int i = ; i <= m ; i ++ ) {
char ch[ ] ;
int x , y ;
scanf( "%s%d%d" , ch , &x , &y ) ;
if( ch[ ] == 'F' ) f[ find( y ) ] = find( x ) ;
else {
f[ find( y + n ) ] = find( x ) ;
f[ find( x + n ) ] = find( y ) ;
}
}
int ans = ;
for( int i = ; i <= n ; i ++ ) f[ i ] = find( i ) ;
sort( f + , f + n + ) ;
for( int i = ; i <= n ; i ++ ) {
if( f[ i ] != f[ i - ] ) ans ++ ;
}
printf( "%d\n" , ans ) ;
}
[BZOJ1370][Baltic2003]Gang团伙 并查集+拆点的更多相关文章
- BZOJ 1370: [Baltic2003]Gang团伙 [并查集 拆点 | 种类并查集WA]
题意: 朋友的朋友是朋友,敌人的敌人是朋友:朋友形成团伙,求最多有多少团伙 种类并查集WA了一节课,原因是,只有那两种关系才成立,诸如朋友的敌人是朋友之类的都不成立! 所以拆点做吧 #include ...
- 【bzoj1370】[Baltic2003]Gang团伙 并查集
题目描述 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1. 我朋友的朋友是我的朋友: 2. 我敌人的敌人是我的朋友: 所有是朋友的人组成一个团伙.告诉你关于这n个人的m条信息, ...
- [BZOJ1370][Baltic2003]Gang团伙
[BZOJ1370][Baltic2003]Gang团伙 试题描述 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1. 我朋友的朋友是我的朋友: 2. 我敌人的敌人是我的朋友: ...
- PAT甲题题解-1034. Head of a Gang (30)-并查集
给出n和k接下来n行,每行给出a,b,c,表示a和b之间的关系度,表明他们属于同一个帮派一个帮派由>2个人组成,且总关系度必须大于k.帮派的头目为帮派里关系度最高的人.(注意,这里关系度是看帮派 ...
- BZOJ 1370: [Baltic2003]Gang团伙(luogu 1892)(种类并查集)
题面: bzoj题面有误,还是看luogu的吧 https://www.luogu.org/problemnew/show/P1892 题解: 种类并查集.. 因为有敌人的敌人是朋友这个条件,所以需要 ...
- Codevs 2597 团伙(并查集)
2597 团伙 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么 ...
- POJ 1182 食物链(并查集拆点)
[题目链接] http://poj.org/problem?id=1182 [题目大意] 草原上有三种物种,分别为A,B,C A吃B,B吃C,C吃A. 1 x y表示x和y是同类,2 x y表示x吃y ...
- HDU 3277Marriage Match III(二分+并查集+拆点+网络流之最大流)
题目地址:HDU 3277 这题跟这题的上一版建图方法差点儿相同,仅仅只是须要拆点.这个点拆的也非常巧妙,既限制了流量,还仅仅限制了一部分,曾经一直以为拆点会所有限制,原来也能够用来分开限制,学习了. ...
- PAT1034. Head of a Gang ——离散化+并查集
题意:成员A与成员B通话 ,成员B与成员C通话,则 ABC即为一个团伙,一共有若干个团伙,每个团伙的人数大于2且相互通话时间超过一定值即为黑帮,每个黑帮伙里有一个BOSS,boss是与各个成员打电话最 ...
随机推荐
- 日期 date +%F-%T-%N
date +%F-%T-%N 2016-03-24-14:40:13-997433641 %% a literal % %a locale's abbreviated weekday nam ...
- 显示界面的流畅性FHHFPSIndicator
github地址https://github.com/jvjishou/FHHFPSIndicator 1.使用cocoapods pod 'FHHFPSIndicator' 使用方法: 然后在Ap ...
- 安装HDF5及在VS下配置HDF5
最近要用到HDF5来存储数据,想要安装尝试用一下.发现网上有两种安装方式,一种是obtain518.html:获取最新的HDF5-1.8软件;另一种是cmakebuild518.html:使用CMAK ...
- Andrew Ng-ML-第十二章-机器学习系统设计
1.确定执行的优先级 图1.邮件垃圾分类举例 选择100个单词作为指示是否是垃圾邮件的指标,将这些单词作为特征向量,只用0/1表示,出现多次也只用1表示,特征变量用来表示邮件. 通常情况下,会选择训练 ...
- Android APP安装后不在桌面显示图标的应用场景举例和实现方法
最近在为公司做一款车联网的产品,由于公司本身擅长于汽车解码器的研发,所以该产品的诊断功能的实现除了使用目前市面上车联网产品中大量使用的OBD协议外,还会使用一些专车专用协议去实现一些特殊的诊断功能,如 ...
- gerrit 使用教程(一)
原文地址:https://www.jianshu.com/p/b77fd16894b6 1, Gerrit是什么? Gerrit实际上一个Git服务器,它为在其服务器上托管的Git仓库提供一系列权限控 ...
- 001-Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- Javascript-逻辑运算符非(!)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 第一篇 Python图片处理模块PIL(pillow)
本篇包含:一.Image类的属性:1.Format 2.Mode 3.Size 4.Palette 5.Info 二.类的函数:1.New ...
- 20155308 2016-2017-2 《Java程序设计》第9周学习总结
20155308 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 驱动的四种类型 JDBC-ODBC Bridg ...