【bzoj4264】小C找朋友

题解
- $a$和$b$是好*友说明除了这两个人以外的邻接集合相同;
- 做两次$hash$,分别都处理和$a$相邻的点排序$hash$,①$a$要算进$a$的相邻集合,②$a$不算进;
- 当两个人不是好*友,一定不会统计,当是且两个人不相邻,会仅被②统计,当是且相邻会仅被①统计;
- 枚举所有的$hash$值统计答案;
- %了$Claris$后学会了对每个点随机生成一个较大值,异或起来$hash$的方法
- 这样用于集合$hash$不用排序,并且删除一个元素直接异或即可
#include<cstdio>
#include<map>
#include<iostream>
#include<vector>
#include<algorithm>
#define ull unsigned long long
using namespace std;
const int N=;
int n,m;
vector<int>s[N];
map<ull,int>mp;
map<ull,int>::iterator it;
int main(){
freopen("bzoj4264.in","r",stdin);
freopen("bzoj4264.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=,x,y;i<=m;i++){
scanf("%d%d",&x,&y);
s[x].push_back(y);
s[y].push_back(x);
}
ull ans=;
for(int i=;i<=n;i++){
sort(s[i].begin(),s[i].end());
unique(s[i].begin(),s[i].end());
ull x=;
for(int j=;j<(int)s[i].size();j++){
x = x * (ull) + s[i][j];
}
mp[x]++;
}
for(it = mp.begin();it!=mp.end();it++){
ans += (ull)it -> second * (it -> second - ) / ;
}
mp.clear();
for(int i=;i<=n;i++){
s[i].push_back(i);
sort(s[i].begin(),s[i].end());
unique(s[i].begin(),s[i].end());
ull x=;
for(int j=;j<(int)s[i].size();j++){
x = x * (ull) + s[i][j];
}
mp[x]++;
}
for(it = mp.begin();it!=mp.end();it++){
ans += (ull)it -> second * (it -> second - ) / ;
}
cout << ans << endl;
return ;
}bzoj4264
【bzoj4264】小C找朋友的更多相关文章
- bzoj4264: 小C找朋友
hash大法好 #include <iostream> #include <cstdio> #include <cstring> #include <cmat ...
- 「bzoj4264 小C找朋友」
权限题 就是一个集合\(hash\) 集合\(hash\)可以用于判断两个集合是否相等,具体做法就是给每个随机一个值,之后异或起来就是可以了 这个题就是这样,处理出每个点直接相连的点集的\(hash\ ...
- 【BZOJ4264】小C找朋友 随机化
[BZOJ4264]小C找朋友 Description 幼儿园里有N个小C,两个小C之间可能是朋友也可能不是.所有小C之间的朋友关系构成了一个无向图,这个无向图中有M条边. 园长ATM发现对于两个(不 ...
- 刷题总结——小c找朋友(bzoj4264 集合hash)
题目: Description 幼儿园里有N个小C,两个小C之间可能是朋友也可能不是.所有小C之间的朋友关系构成了一个无向图,这个无向图中有M条边. 园长ATM发现对于两个(不同的)小Ci和j,如果其 ...
- BZOJ 4264 小C找朋友 哈希+脑子
好吧我觉得是脑子,别人觉得是套路$qwq$ 这道题相当于是求除了$u,v$两点互相连接,所连的点相同的点对$(u,v)$ 我们首先每个点一个随机权值,对于$u$点记为$w[u]$,然后记与$u$点相连 ...
- BZOJ 4264 小c找朋友 - hash
传送门 题目大意: 给定一张无向图,求满足以下条件的点对 (x,y) 数目:对任意点 z (z!=x,y),边 (x,z) 和 (y,z) 同时存在或同时不存在. 题目分析: 首先要分析的出如果xy满 ...
- hunnu--11548--找啊找啊找朋友
找啊找啊找朋友 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 14, ...
- 51nod 1463 找朋友 (扫描线+线段树)
1463 找朋友 基准时间限制:1.5 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 收藏 关注 给定: 两个长度为n的数列A .B 一个有m个元素的集合K 询问Q次 每次询 ...
- Java程序设计——反转字符串 & 找朋友 & 计算int型二进制1的个数 & 情报加密 & 计算日期 & 求近似数 & 输出较小数(练习1)
作为刚刚入门Java的选手,其实C++的功底起到了很大的作用.但是,Java之于C++最大的不同,我个人认为,是其类的多样性.才入门的我,写着老师布置的简单的面对过程的题,如果是C++,可以算是简单了 ...
随机推荐
- BOM 头是什么,怎么除去
WINDOWS自带的记事本,在保存一个以 UTF-8 编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别这个文 ...
- Python常用模块之PIL(手册篇:Image模块)
官方手册地址:http://effbot.org/imagingbook/image.htm Image模块 图像模块提供了一个具有相同名称的类,用于表示一个PIL的图像.该模块还提供了许多功能,包 ...
- Java调用XML的方法:DocumentBuilderFactory
(1)首先得到:得到 DOM 解析器的工厂实例 DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); (2)然后从 D ...
- 搭建gitpage博客
http://blog.csdn.net/jzooo/article/details/46781805
- 2-Second Scrum Meeting-20151202
任务安排 闫昊: 今日完成:设计学习进度的管理. 明日任务:请假.(编译+计组,压力有点大) 金哉仁: 今日完成:继续商讨APP相关界面与设计,安装AndroidStudio. 明日任务:请假.(编译 ...
- 第三周vim入门学习1
一.vim模式介绍 1.概念:以下介绍内容来自维基百科Vim 从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆.几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使 ...
- Hibernate 与 mybatis 区别
JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结 我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践 ...
- SpringMVC入门学习案例笔记
一.数据库环境用mysql,数据库建表语句如下: /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************* ...
- Java分布式应用
分布式计算就是通过计算机网络将计算工作分布到多台主机上,多个主机一起协同完成工作. 我试着列一下相关知识吧. 网络通讯,网络是分布式的基础,对分布式的理解建立在对网络的理解上,包括: OSI模型的7层 ...
- 配置高可用集群(实验) corosyne+pacemaker
环境准备: 一准备三个虚拟机,把/etc/hosts/文件配置好 192.168.43.9 node0 ...