【BZOJ4264】小C找朋友 随机化】的更多相关文章

[BZOJ4264]小C找朋友 Description 幼儿园里有N个小C,两个小C之间可能是朋友也可能不是.所有小C之间的朋友关系构成了一个无向图,这个无向图中有M条边. 园长ATM发现对于两个(不同的)小Ci和j,如果其他的所有小C要么同时是i,j的朋友,要么同时不是i,j朋友的话,这两个小C就很有可能一起去吃饭,成为一对好*友.出于一些未知的原因,ATM需要你帮他求出可能成为好*友的小C的对数. Input 第一行一个数N,M,如题目描述. 接下来M行,每行2个数表示一条无向边. Outp…
hash大法好 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> #include <vector> #define ll long long #define N 1000006 #define M 2000006 using namespace…
权限题 就是一个集合\(hash\) 集合\(hash\)可以用于判断两个集合是否相等,具体做法就是给每个随机一个值,之后异或起来就是可以了 这个题就是这样,处理出每个点直接相连的点集的\(hash\)值,之后判断一下有多少对\(hash\)值相等就好了 在考虑一下每条边就做完了 代码 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<c…
题目: Description 幼儿园里有N个小C,两个小C之间可能是朋友也可能不是.所有小C之间的朋友关系构成了一个无向图,这个无向图中有M条边. 园长ATM发现对于两个(不同的)小Ci和j,如果其他的所有小C要么同时是i,j的朋友,要么同时不是i,j朋友的话,这两个小C就很有可能一起去吃饭,成为一对好*友.出于一些未知的原因,ATM需要你帮他求出可能成为好*友的小C的对数. Input 第一行一个数N,M,如题目描述. 接下来M行,每行2个数表示一条无向边. Output 输出可能成为好*友…
题解 $a$和$b$是好*友说明除了这两个人以外的邻接集合相同: 做两次$hash$,分别都处理和$a$相邻的点排序$hash$,①$a$要算进$a$的相邻集合,②$a$不算进: 当两个人不是好*友,一定不会统计,当是且两个人不相邻,会仅被②统计,当是且相邻会仅被①统计: 枚举所有的$hash$值统计答案: %了$Claris$后学会了对每个点随机生成一个较大值,异或起来$hash$的方法 这样用于集合$hash$不用排序,并且删除一个元素直接异或即可 #include<cstdio> #in…
好吧我觉得是脑子,别人觉得是套路$qwq$ 这道题相当于是求除了$u,v$两点互相连接,所连的点相同的点对$(u,v)$ 我们首先每个点一个随机权值,对于$u$点记为$w[u]$,然后记与$u$点相连的点的异或和为$hsh[u]$ 分类: 若$u,v$相连,则$u,v$是朋友满足$(hsh[u]^w[v])==(hsh[v]^w[u])$: 若$u,v$不相连,则$u,v$是朋友满足$hsh[u]==hsh[v]$: 对于第一种情况,直接枚举每条边上的两点就行了:对于第二种情况,先把$hsh$数…
传送门 题目大意: 给定一张无向图,求满足以下条件的点对 (x,y) 数目:对任意点 z (z!=x,y),边 (x,z) 和 (y,z) 同时存在或同时不存在. 题目分析: 首先要分析的出如果xy满足要求,那么x和y的连边点集应该是相同的,这里又分为两种情况: xy之间有边,加上自己的hash值后求集合哈希值出现的次数 xy之间没有边,直接hash求不包含自己的集合哈希值出现的次数 bzoj加上srand(time(0))就会RE,有毒 code #include<iostream> #in…
找啊找啊找朋友 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 14, Accepted users: 11 Problem 11548 : No special judgement Problem description   小明和小红是一对好朋友,小明一有空就去找小红玩.可是小红飘忽的行踪让小明非常是伤脑筋. 小红居住的小区的地下有当年抗战时期留下的地道,小红平时总…
1463 找朋友  基准时间限制:1.5 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  关注 给定: 两个长度为n的数列A .B 一个有m个元素的集合K 询问Q次 每次询问[l,r],输出区间内满足|Bi-Bj|∈K 的最大Ai+Aj   数据约定: n,Q<=100000 m <= 10 0<=A[i]<=1000000000 1<=B[i]<=n 1<=K[i]<=n 保证B[i]互不相等 Input n Q m A1 A2…
作为刚刚入门Java的选手,其实C++的功底起到了很大的作用.但是,Java之于C++最大的不同,我个人认为,是其类的多样性.才入门的我,写着老师布置的简单的面对过程的题,如果是C++,可以算是简单了,但是,在Java中,各种类和函数能否熟练掌握以及是否理解其本身的性质,对于能否迅速过渡并且完成老师的任务至关重要. 在C++中,最简单也是最常用的输入输出,变为了一长串的调用.虽然繁琐,但熟能生巧.下面几道题便是这几天的成果. 经过训练,确实可以感觉到一种从陌生到熟练的感觉.也希望对大家有所帮助.…