日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树哈希判断同构无根同构问题转有根同构问题

發(fā)布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树哈希判断同构无根同构问题转有根同构问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

判斷無根的同構(gòu)
利用重心作為根進(jìn)行dfs處理
注意哈希的公式:

f[fa]=∑f[son]*primesiz[fa]

這個東西好像也是千變?nèi)f化
復(fù)雜度:nmlogn

代碼

#include<bits/stdc++.h> using namespace std; #define ll long long #define int long long const int N=3e5+100; const int mod=1019260817; const int key=131; int n,m; int x,y; struct node{int to,nxt; }p[N<<1]; int fi[N],cnt; ll mi[N]; void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt; } int siz[N],r,rr,res,dep[N]; void find_r(int x,int f){siz[x]=1;int mx=0;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;//printf("x=%d to=%d\n",x,to);if(to==f) continue;find_r(to,x);siz[x]+=siz[to];mx=max(mx,siz[to]);}mx=max(mx,n-siz[x]);//printf("x=%d f=%d siz=%d hson=%d mx=%d res=%d\n",x,f,siz[x],hson[x],mx,res);if(!r||mx<res){r=x;res=mx;rr=0;}else if(mx==res){rr=x;} } typedef pair<int,int>pr; #define mkp make_pair int has[N]; pr q[N]; int num; void dfs(int x,int f){dep[x]=dep[f]+1;has[x]=(ll)(dep[x]*key)%mod,siz[x]=1;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(to==f) continue;//dep[to]=dep[x]+1;dfs(to,x);}num=0;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(to==f) continue;q[++num]=mkp(has[to],siz[to]);siz[x]+=siz[to];}sort(q+1,q+1+num);for(int i=1;i<=num;i++){has[x]=(ll)(has[x]+(ll)q[i].first*mi[siz[x]])%mod;//siz[x]+=q[i].second;} // printf(" x=%d has=%d\n",x,has[x]); }int fa[N],fb[N]; void add(int tag){scanf("%d",&n);fill(fi,fi+1+n,-1);cnt=-1;for(int i=1;i<=n;i++){scanf("%d",&x);if(x) addline(i,x),addline(x,i);}r=rr=0;find_r(1,0); // printf("i=%d r=%d rr=%d\n",tag,r,rr); // printf("r=%d\n",r);dfs(r,0);fa[tag]=has[r];if(rr) {/*printf("r=%d\n",rr);*/dfs(rr,0);fb[tag]=has[rr];}if(rr&&fa[tag]>fb[tag]) swap(fa[tag],fb[tag]); // printf("i=%d fa=%d fb=%d\n",tag,fa[tag],fb[tag]); } signed main(){ // freopen("split.in","r",stdin); // freopen("split.out","w",stdout);mi[0]=1;for(int i=1;i<=50;i++) mi[i]=(ll)mi[i-1]*key%mod;scanf("%d",&m);for(int i=1;i<=m;i++) add(i);for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){if(fa[i]==fa[j]&&fb[i]==fb[j]){printf("%d\n",j);break;}}}return 0; } /* 5 1 1 2 1 3 3 5 3 4 2 311 3 1 2 2 3 2 4 1 5 5 6 5 7 5 8 6 9 8 10 8 11 2 9 3 6 2 8 */

總結(jié)

以上是生活随笔為你收集整理的树哈希判断同构无根同构问题转有根同构问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天综合天天做天天综合 | 亚洲欧洲一区二区在线观看 | 91精品久久久久久久99蜜桃 | 九一福利视频 | 美国黄色一级毛片 | 国产乱淫a∨片免费视频 | 精品乱码一区二区三区四区 | 国产一区二区三区免费看 | 蜜桃av一区二区三区 | 日韩精品一区二区三区中文字幕 | 黄色在线观看www | 好吊操视频这里只有精品 | 五月天一区二区三区 | 99久久99久久 | 亚洲视频一区二区三区在线观看 | 国产一区二区精品在线观看 | 一区二区高清视频 | 国产偷人妻精品一区二区在线 | 国产精品 欧美激情 | 色婷五月天 | 黄色小视频免费网站 | 善良的女邻居在线观看 | 欧美激情网站 | 91黄色大片 | 成人手机视频 | 波多野结衣影院 | 国产三区视频 | 一本高清dvd在线播放 | 精品人妻在线一区二区三区 | 四虎在线免费播放 | 久久片| 4438亚洲最大 | 日本欧美一区二区三区 | 欧美视频一二三 | 男人操女人视频网站 | 国产11页 | 九九欧美| 欧美在线日韩在线 | 日本大奶视频 | xxxxx国产| 日本欧美在线播放 | 日日碰| 国产成人精品在线视频 | 国产97自拍| 日韩黄色一级大片 | 国产911 | 国产成a人亚洲精v品无码 | 亚洲精品国产精品乱码不99 | 欧美一区二区三区激情啪啪 | 黄视频免费观看 | 99热香蕉 | 好吊色欧美一区二区三区视频 | 夫妻自拍偷拍 | 91激情视频在线观看 | 亚洲一区二区小说 | 69av一区二区三区 | 欧美午夜激情视频 | 国产第一页在线播放 | yes4444视频在线观看 | 国产做受高潮动漫 | 日韩午夜在线视频 | 中文字幕在线国产 | 老熟妇一区二区 | 三级亚洲| 麻豆乱码国产一区二区三区 | 国产污视频在线 | 亚洲欧美日韩一区 | 国产精品久久久久久免费观看 | 欧美精品一区二区三区视频 | 一区精品二区国产 | 人人妻人人澡人人爽人人精品 | 日本涩涩网站 | 黄色污污视频网站 | 国产成人综合精品 | av毛片在线播放 | 伊人论坛| 国产无套视频 | 三级网站视频 | 熟妇高潮一区二区三区 | 国产精品日本一区二区在线播放 | 综合成人在线 | www.四虎精品| 欧美一区二区在线观看视频 | 91免费国产在线 | 中国av一区 | 越南毛茸茸的少妇 | 欧美一a一片一级一片 | 中文字幕一区二区三区乱码不卡 | 亚洲精品中文字幕在线播放 | 亚洲欧洲综合 | 成人激情视频网站 | 亚洲av无码一区二区乱子仑 | 亚洲超丰满肉感bbw 悠悠av | 久久嫩草视频 | 国产鲁鲁视频在线观看免费 | 五月婷激情 | 91精品又粗又猛又爽 | 18无码粉嫩小泬无套在线观看 | 亚洲欧美字幕 |