【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++,可以算是简单了 ...
随机推荐
- 点斜杠 & 如何查看linux程序安装位置 dpkg -L yyy
方法1: sudo find / -name ssh 方法2: Ubuntu下 看应用程序安装路径的方法 ubuntu下dpkg -L xxx看应用程序安装路径 1.点斜杠 “./”就代表在当前目录下 ...
- 如何使用g++编译调用dll的c++代码
本文将有以下4个部分来讲如何使用g++编译调用dll的c++代码. 1.如何调用dll 2.动态链接和静态链接的区别 3.g++的编译参数以及如何编译调用dll的c++代码 4.总结 1.如何调用dl ...
- 渡过OO的死劫,了解规格的意义——OO第三次博客总结
当熬过了一次次黑暗,迎接我们的却是被扣的惨不忍睹的JSF ┭┮﹏┭┮ 一.总结调研 规格的历史 传统科学的特点是发现世界,而软件的特点是构造世界.软件的最底层就是0,1,两个离散的值.程序设计语言的三 ...
- 跟踪调试Linux内核的启动过程
跟踪调试Linux内核的启动过程---使用gdb 符钰婧 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...
- GridView的控件说明[字典]-----方便查询
GridView 控件以表格的形式显示数据,并提供对数据进行排序,选择,编辑,删除等功能. GridView能够完成的功能具体可以总结如下: 1,通过数据源控件将数据绑定到GridView控件 2,对 ...
- Codeforces Round #105 (Div. 2) D. Bag of mice 概率dp
题目链接: http://codeforces.com/problemset/problem/148/D D. Bag of mice time limit per test2 secondsmemo ...
- ThoughtWorks.QRCode类库
ThoughtWorks.QRCode一个二维码生成类库.
- 【Leetcode】86. Partition List
Question: Given a linked list and a value x, partition it such that all nodes less than x come befor ...
- NodeJs 遍历文件夹内容 上传到服务器.并输出上传记录文件
var path = require('path'); var glob = require('glob') var fs = require('fs'); var Promise = require ...
- JS贪吃蛇小游戏
效果图展示: 具体实现代码如下: (1)html部分 !DOCTYPE html> <html> <head> <meta charset="utf-8& ...