非常強大的人工棧模板,不看白不看!!!!

2021-08-10 13:37:13 字數 2726 閱讀 3222

原題:判斷2棵樹是否為同構樹。

題解:直接對每個節點記錄一下它的雜湊值。這個雜湊值體現了以這個節點為根的子樹的形態。比較下每個相對位置的雜湊值是否相同。

#include

#include

#include

#include

#include

#include

#define n 100010

#define q 8388608

#define zz 2333223

#define zz1 2323233

#define mo 1000000007

#define inf 2147483647

#define ll long long

#define p(a) putchar(a)

#define fo(i,a,b) for(i=a;i<=b;i++)

using

namespace

std;

struct note;note edge[n*2],edge1[n*2];

struct note2;note2 a[n],b[n];

struct note3;note3 c[n],c1[n];

int i,j,k,l,n,n1,m,last;

int cn0,cn1;

int head[n],head1[n],head4[n];

int tot,tot1,r,r1;

int u,v;

int siz[n],siz1[n],mx[n],mx1[n],hv,hv1,hv2,hv3;

int fa[n],fa1[n],p[n];

int st[n];

int qu[n][2],h,t;

ll ha[q],rd,rd1;

ll tt[n],tt1[n];

bool ia,bz[n];

int read()

void write(int x)

void lb(int x,int y)

void lb1(int x,int y)

int hash(ll x)

void findhv(int x)

for(i=head4[x];i;i=edge[i].next)

if(fa[x]!=edge[i].to)

if(!p)

}st[0]--;}}

}void findhv1(int x)

for(i=head4[x];i;i=edge1[i].next)

if(fa1[x]!=edge1[i].to)

if(!p)

}st[0]--;}}

}void dg(int x)

p=0;

for(i=head4[x];i;i=edge[i].next)

if(fa[x]!=edge[i].to)

if(!p)st[0]--;

}}void dg1(int x)

p=0;

for(i=head4[x];i;i=edge1[i].next)

if(fa1[x]!=edge1[i].to)

if(!p)st[0]--;

}}void working(int x)

void working1(int x)

void working2(int x)

}void working3(int x1)

}void working4(int x)

if(!tt[0]) else

}void working5(int x)

if(!tt[0]) else

}void dg2(int x)

if(!p)

}}void dg3(int x)

if(!p)

}}bool cmpx(note3 x,note3 y)

int main()

fo(i,1,n-1)

mx[0]=mx1[0]=inf;

findhv(1);findhv1(1);

if(hv2 && !hv3 || hv3 && !hv2)

n1=n;

if(hv2) else r=hv,r1=hv1;

memset(fa,0,sizeof(fa));

memset(fa1,0,sizeof(fa1));

memset(siz,0,sizeof(siz));

memset(siz1,0,sizeof(siz1));

dg(r);dg1(r1);dg2(r);dg3(r1);

ia=0;

qu[1][0]=r;qu[1][1]=r1;

h=0,t=1;

int x,x1;

while(h0],x1=qu[h][1];

if(a[x].hh!=b[x1].hh || a[x].hhh!=b[x1].hhh)

p[x]=x1;

cn0=cn1=0;

working2(x);

working3(x1);

if(cn0!=cn1)

sort(c+1,c+cn0+1,cmpx);

sort(c1+1,c1+cn1+1,cmpx);

fo(i,1,cn0)

}if(ia)

printf("yes\n");

fo(i,1,n1)write(p[i]),p(' ');

return

0;}

做個強大的人

人生不易且行且珍惜。最近有點小感想,沒事寫篇文章嘮叨一下吧。人生的過法多樣,說兩種比較典型的吧。認知有限,只是自己的感想。如果不喜歡就當看個樂子吧。1.死守自己的認知不思進取,不求上進,一味地沉迷於休閒娛樂之中,過著一眼就可以望到頭的生活。2.在恪守本分的情況下,盡量增加和擴寬自己的認知。以使自己完...

呼叫一款強大的人工智慧平台

php 圖靈機械人 需要匯入的包 commons logging 1.0.4.jar httpclient 4.3.1.jar httpcore 4.3.jar apikey apiurl openapi api?key key info info 設定報文頭,構建請求報文 header conte...

做個內心強大的人

今天和老大爭吵乙個小小的功能,他覺得他那樣比較合理,我覺得我這樣更有意義。每每當老大說這個功能要修改那個功能要新增,都很頭痛,這意味你可能需要花很大精力去實現這個小小功能,可能需要重新寫很多很多 然後,我總是會問為什麼要這樣做,這樣做有什麼意義?然後在討論中漸漸理解,在討論中漸漸完善,哪怕花費很大的...