description
幼兒園裡有n個小c,兩個小c之間可能是朋友也可能不是。所有小c之間的朋友關係構成了乙個無向圖,這個無向圖中有m條邊。
園長atm發現對於兩個(不同的)小ci和j,如果其他的所有小c要麼同時是i,j的朋友,要麼同時不是i,j朋友的話,這兩個小c就很有可能一起去吃飯,成為一對好友。出於一些未知的原因,atm需要你幫他求出可能成為好友的小c的對數。
input
第一行乙個數n,m,如題目描述。
接下來m行,每行2個數表示一條無向邊。
output
輸出可能成為好*友的小c的對數。
sample input
3 31 2
2 31 3
sample output
3 hint
n,m<=1000000
source
跟zky學長學習了新姿勢:邊集hash
#include
#include
#include
#include
#include
#define maxn 1000010
#define get (ch>='0'&&ch<='9')
#define ll long long
using namespace std;
int n,m;
ll val[maxn],hash[maxn];
ll ans,cnt;
struct edge
}e[maxn];
void
in(int &x)
int main()
sort(e+1,e+m+1);m=unique(e+1,e+m+1)-e-1;
for (int i=1;i<=m;i++) if (e[i].u!=e[i].v) hash[e[i].u]^=val[e[i].v],hash[e[i].v]^=val[e[i].u];
for (int i=1;i<=m;i++) if (e[i].u!=e[i].v&&((hash[e[i].u]^val[e[i].v])==(hash[e[i].v]^val[e[i].u]))) ans++;
sort(hash+1,hash+n+1);
for (int i=1;i<=n;i++)
cout<}
bzoj4264 小C找朋友
怎麼說呢,這應該算是一種新知識吧,圖上hash。具體做法就是每個點都附上乙個初值,然後把每個點所連的點的值 合 起來,然後就可以判斷相連的點是否一樣了 不包括自己 如果要讓自己也在的話,再 合 上自己就好了。關於怎麼 合 有多種方法,感覺一般採用二進位制運算,因為不用考慮順序呀。好像異或的正確率比較...
4264 小C找朋友(hash)
幼兒園裡有 n n 個小c role presentation style position relative c c,兩個小 c c 之間可能是朋友也可能不是。所有小 c role presentation style position relative c c之間的朋友關係構成了乙個無向圖,這個...
4264 小C找朋友 hash
這道題目一眼就hash啊 但是我還是沒做出來,因為我的hash方法太過 了,直接用乙個二進位制表示每個人的朋友集合 正解的hash方法其實也接觸過,但是我沒用過太多,記錄一下 給每個人隨機乙個很大的權值,乙個人朋友集合的表示方法就是把它的朋友的權值異或起來。include using namespa...