代码仓库培训资料6655.docx
64代码仓库代码仓库库目录:01.【数数学方法法】矩阵阵快速幂幂02.【数数学方法法】高斯斯消元(naïïve版版)03.【数数学方法法】高斯斯消元(mmid版版)04.【字字符串啊啊】Maanaccherr算法(回回文串)05.【字字符串啊啊】KMMP(字字符串匹匹配)06.【数数据结构构】线段段树(ZZKW单单点修改改)07.【数数据结构构】线段段树(RRMQ)08.【数数据结构构】线段段树(区区间加+赋值)09.【数数据结构构】Spplayy树(未未完全测测试)/!10.【数数据结构构】AVVL树(平平衡树)11.【图图论图论论】最小小生成树树(prrim)12.【图图论图论论】次小小生成树树13.【图图论图论论】最大大流(DDiniic)14.【图图论图论论】LCCA+最最大生成成树(ttrucck)15.【动动态规划划】背包包01,多多重,完完全矩阵模板板#inccludde<ccstddio>> #inccludde<ccstrringg>#inccludde<iiosttreaam>usinngnaamesspacce sstd;typeedefflonngloong ll;consstinnt PP =99773;consstinnt NN=13;ll nn,m;struuct mattrixx ll aNN;int roww,coll; mattrixx():roww(N),cool(N)meemseet(a,0,sizzeoff(a);/? mattrixx(intt x,intt y):roww(x),cool(y)meemseet(a,0,sizzeoff(a); ll*opeerattor(intt x)retturnn ax; mattrixx opperaatorr*(mattrixx x) maatriix ttmp ;for(intt i=0;i<=n+1;i+)for(intt j=0;j<=n+1;j+) tmppij=0;for(intt k=0;k<=n+1;k+) tmmpij=(tmppij+aik*xkj)%P;retuurn tmpp;voiddopeerattor*=(mattrixx x)*tthiss=*thiis* x; mattrixx opperaatorr(ll x) maatriix rret;for(intt i=0;i<=n+1;i+)rettii=1; maatriix ttmp =*thiis;for(;x;x>>=1,tmpp*=tmmp)if(x&1)rett *=tmpp;retuurn rett;voidd prrintt()for(intt i=0;i<=n+1;i+)for(intt j=0;j<=n+1;j+) priintff("%dd ",aij); pputss("");高斯消元元,判断断有无解解的#inccludde<ccstddio>>#inccludde<ccmatth>#inccludde<ccstrringg>#inccludde<iiosttreaam>#inccludde<vvecttor>>usinngnaamesspacce sstd;typeedefflonngloong LL;consstdooublle EEPS=1e-6;consstinnt NN=55;struuct mattrixxint aNN;int roww,coll; mattrixx():roww(N),cool(N)meemseet(a,0,sizzeoff(a); mattrixx(intt x,intt y):roww(x),cool(y) meemseet(a,0,sizzeoff(a);int*opeerattor(iint x)retturnn ax;voidd prrintt()for(intt i=0;i<roww;i+)for(intt j=0;j<coll;j+) priintff("%dd ",aij); pputss(""); puuts("");int Gauuss(mattrixx a,intt m,intt n)int x_ccnt =0;int coll, k;/ccol为为列号,k为行行号for(k=0,coll=0;k<m&&cool<n;+k,+cool)int r = k;/rr为第ccol列列的一个个1for(intt i=k;i<m;+i)if(aicool)r=i;if(!arcool) kk-;conntinnue;if(rr!=k)forr(intt i=coll;i<=n;+i) sswapp( ari, aaki);for(intt i=k+1;i<m;+i)if(aicool)/消消元for(intt j=coll;j<=n;+j)aij=akj;for(intt i=k;i<m;+i)if(ain)reeturrn-1;if(kk<=n)retturnn n-k;/返返回自由由元个数数高斯消元元,求出出一组解解的#inccludde <<iosstreeam>>#inccludde <<alggoriithmm>#inccludde <<csttdioo>#inccludde <<csttrinng>#inccludde <<cmaath>>usinngnaamesspacce sstd;consstinnt NN =10110;consstdooublle EEPS=1e-7;int m,n;doubble aNN,xN;int Gauuss(intt m,intt n)int coll=0, k=0;/ccol为为列号,k为行行号for(;k<m&&cool<n;+k,+coll)int r = k;for(intt i=k+1;i<m;+i)if(ffabss(aicool)>faabs(arcool)r=i;if(ffabss(arcool)<EPPS)k-;conntinnue;/列全为为0if(rr!=k)forr(intt i=coll;i<=n;+i) sswapp(aki,ari);for(intt i=k+1;i<m;+i)/消消元if(ffabss(aicool)>EPPS)doubble t = aicool/akcool;for(intt j=coll;j<=n;j+)aij-=akj*t; aaicool=0;for(intt i=k ;i<m ;+i)/无无解if(ffabss(ain)>>EPSS)retturnn-1;if(kk < n)retturnn n - k;/自自由元个个数for(intt i =n-1; i>=0; i-)/回带带求解doubble temmp = ain;for(intt j=i+1; j<n;+j) ttempp -= xj* aij; xi=(temmp / aii);retuurn00;Manaacheer算法法#inccludde<ccstddio>>#inccludde<sstriing>>#inccludde<ccstrringg>#inccludde<iiosttreaam>#inccludde<aalgooritthm>>usinngnaamesspacce sstd;consstinnt NN=23333333;/220W/在oo(n)时间内内算出以以每个点点为中心心的最大大回文串串长度int Mannachher(strringg stt)int lenn=st.sizze();int*p=newwinttlenn+1; memmsett(p,0,sizzeoff(p);int mx=0,id=0;for(intt i=1;i<=leen;i+)if(mmx>i)pi=miin(p2*id-i,mxx-i);elsee pi=1;whille(sti+pi=stti-pi)pi+;if(ii+pi>mxx)mxx=i+pi;idd=i;int ma=0;for(intt i=1;i<lenn;i+)ma=maxx(ma,pi);deleete(p);retuurn ma-1;int maiin()/frreoppen("fuuck.in"","rr",sstdiin);charr sttN;whille(scaanf("%ss",st) sttrinng sst0="$#"for(intt i=0;sti!='00'i+) sst0+=stti; sst0+="#" prrinttf("%ddn"",Mannachher(st00);retuurn00;KMP 字符串串匹配#inccludde<ccstddio>>#inccludde<ccstrringg>usinngnaamesspacce sstd;typeedefflonngloong ll;consstinnt NN=10000077;consstinnt PP=1000000000007;charr aN,bN;booll maatN;int nexxtN;ll ffN;voidd geetNeext(intt m)int i=0,j=-1; nexxt0=-1;whille(i<m)if(jj=-1|bi=bj)if(bb+i!=b+j)neexti=j;elsee neexti=neextj;elsse jj=nexxtj;voidd KMMP(intt n,intt m) memmsett(matt,0,sizzeoff(matt);int i=0,j=0; gettNexxt(m);whille(i<n&&j<m)if(jj=-1|ai=bj)i+,j+;elsee j=nexxtj;if(!i&&!j)breeak;if(jj=m) mmati=1;/prrinttf(""matt%ddgeetnn",ii); jj=nexxtj;线段树(ZKWW大法)#inccludde<ccstddio>>#inccludde<ccstrringg>#inccludde<iiosttreaam>#inccludde<aalgooritthm>>usinngnaamesspacce sstd;consstinnt IINF=0x33f3ff3f33f;consstinnt NN=300001000;struuct linnetrree#deffinee lcc (t<<<1)#deffinee rcc (t<<<111)int miN,M;inliinevvoidd buuildd(intt n) M=1;whiile(M<n)M<<=1; M-; meemseet(mi,INFF,sizzeoff(mi);for(intt i=1+M;i<=n+M;i+) sccanff("%dd",&mii);for(intt t=M;t>=1;t-)mit=miin(milc,mirc);voidd chhangge(intt t,intt x)for(mit+=M=x,t>>=1;t;t>>=1) mmit=miin(milc,mirc);int queery(intt l,intt r)int anss = INNF;for(l+=M-1,r+=M+1;lr1;l>>=1,r>>=1)if(l&1)anss=minn(anss,mil1);if( r&1)anss=minn(anss,mir1);retuurn anss;T;int maiin()int n,q,ordd,x,y;for(;sscannf("%dd",&&n);) T.buiild(n);for(scaanf("%dd",&&q);q-;) sscannf("%dd%d%d",&orrd,&&x,&y);if(oord)T.chaangee(x,y);elsee prrinttf("%ddn"",T.queery(x,y);retuurn00;线段树(RRMQ)#inccludde<ccstddio>>#inccludde<ccstrringg>#inccludde<iiosttreaam>#inccludde<aalgooritthm>>usinngnaamesspacce sstd;consstinnt IINF=0x33f3ff3f33f;consstinnt NN=60001000;int n,anss,m,aN;struuct nodde int l,r,id; nodde () nodde(intt x,intt y,intt z)l=x;r=y;id=z;bNN,cN;inliinebbooll cmmp1(nodde aa,nodde bb)reeturrn aa.l<b.l;inliinebbooll cmmp2(nodde aa,nodde bb)reeturrn aa.r<b.r;struuct linnetrree#deffinee lcc (t<<<1)#deffinee rcc (t<<<111)#deffinee miid (ltt+rrt>>11)int lN,rN,maaN,miiN,M,taN,tiiN;inliinevvoidd buuildd(intt n) M=1;whiile(M<n)M<<=1; M-; meemseet(ma,0,sizzeoff(ma); meemseet(mi,INFF,sizzeoff(mi); meemseet(ta,0,sizzeoff(ta); meemseet(ti,INFF,sizzeoff(ti);for(intt i=1+M;i<=M*2+1;i+)li=ri= ii-M ;for(intt t=M;t>=1;t-)lt=llc,rt=rrc;inliinevvoidd doown(intt t)if(tt>M)retturnn;/lleaff noode maalc=maxx(malc,tat); maarc=maxx(marc,tat); taalc=maxx(talc,tat); taarc=maxx(tarc,tat); taat=0; miilc=minn(milc,tit); miirc=minn(mirc,tit); tiilc=minn(tilc,tit); tiirc=minn(tirc,tit); tiit= INNF;inliinevvoidd maainttainn(intt t) maat=maax(malc,marc); miit=miin(milc,mirc);inliinevvoidd taag(intt t,intt x) maat=maax(mat,x); miit=miin(mit,x); taat=maax(tat,x); tiit=miin(tit,x);voidd chhangge(intt t,intt L,intt R,intt x)if(LL<=lt&&&rt<=R)taag(t,x);reeturrn;/iin doown(t);if(LL<=miid)chaangee(lc,L,R,x);if(mmid<< R)chaangee(rc,L,R,x); maainttainn(t);voidd quueryy(intt t)if(tt>M)/leaaf nnodee bbt-M=ct-M=noode(mit,maat,t-M);retuurn; doown(t); quueryy(lc); quueryy(rc); maainttainn(t);T;线段树(区区间加+赋值)#inccludde<ccstddio>>#inccludde<ccstrringg>#inccludde<iiosttreaam>#inccludde<aalgooritthm>>usinngnaamesspacce sstd;consstinnt NN =26000000;int n,m;struuct linnetrree#deffinee lcc (t<<<1)#deffinee rcc (t<<<111)#deffinee miid (ltt+rrt>>11)int lN,rN,M,taggN,suumN,leenN,SeetN;inliinevvoidd buuildd(intt n) M=1;whiile(M<n)M<<=1; M-;/gett M meemseet(summ,0,sizzeoff(summ); meemseet(tagg,0,sizzeoff(tagg); meemseet(Sett,0,sizzeoff(Sett);for(intt i=1+M;i<=M*2+1;i+)/leaafif(ii<=n+M)scaanf("%dd",&&summi); lli= ri= i-M ; lleni=1;for(intt t=M;t>=1;t-)/fattherrs ssumt=suumlc+summrc; llt=llc, rt=rrc; llent=leenlc+lennrc;inliinevvoidd doown(intt t)if(tt>M)Seett=taagt=0;retturnn;/leaaf nnodeeif(SSett) ssumlc=Settt*leenlc; ssumrc=Settt*leenrc; SSetlc=Settt; SSetrc=Settt; SSett=0; ttaglc=taggrc=0;if(ttagt) ssumlc+=taagt*leenlc; ssumrc+=taagt*leenrc; ttaglc+=taagt; ttagrc+=taagt; ttagt=0;inliinevvoidd _ttag(intt t,intt x) suumt+=x*lennt; taagt+=x;inliinevvoidd _sset(intt t,intt x) suumt=x*lennt; Seett=x; taagt=0;voidd chhangge(intt t,intt L,intt R,intt x)if(LL<=lt&&&rt<=R)_ttag(t,x);reeturrn; doown(t);if(LL<=miid)chaangee(lc,L,R,x);if(mmid<< R)chaangee(rc,L,R,x); suumt=suumlc+summrc;voidd seet(intt t,intt L,intt R,intt x)if(LL<=lt&&&rt<=R)_sset(t,x);reeturrn;/iin doown(t);if(LL<=miid)sett(lc,L,R,x);if(mmid<< R)sett(rc,L,R,x); suumt=suumlc+summrc;int queery(intt t,intt L,intt R)if(LL<=lt&&&rt<=R)retturnn suumt; doown(t);int anss =0;if(LL<=miid)anss+=quueryy(lc,L,R);if(mmid<< R)anss+=quueryy(rc,L,R);retuurn anss;T;Splaay-TTreee#inccludde<ccstddio>>#inccludde<aalgooritthm>>usinngnaamesspacce sstd;struuct Noddeint keyy;/ssizee Nodde *l,*r,*f;/lleftt,riightt,faatheer;classs SSplaayTrreepubllic:voidd Innit()rrt=NULLL;voidd Zaag(Nodde *x)/lefft rrotaate Noode *y=x->f;/yy iss thhe ffathher of x y->r = x->>l;if(xx->l)x->l->f = y;/iif xx haas lleftt chhildd x->f =y->f;if(yy->f)/y iis nnot roootif(yy=y->f->l)y->f->l=x;/yy iff leeft chiildelsee y->>f->r=x;/yy iss riightt chhildd y->f=x;x->l=y;voidd Ziig(Nodde *x)/rigght rottatee Noode *y=x->f;/yy iss thhe ffathher of x y->l = x->>r;if(xx->r)x->r->f=y; x->f = y->>f;if(yy->f)if(yy=y->f->l)y->f->l=x;elsee y->>f->r=x; y->f=x; x->r=y;voidd Spplayy(Nodde *x)whille(x->f) NNodee *p=x->f;if(!p->f)if(xx=p->l)Zigg(x);elsee Zaag(x);elsseiff(x=p->l)if(pp=p->f->l)Ziig(p);Ziig(x);elseeZigg(x);Zaag(x);elsse/xx=pp->rrif(pp=p->f->r)Zaag(p);Zaag(x);elseeZagg(x);Ziig(x); rtt=x; Nodde *Finnd(intt x) Noode *T=rt;whille(T)if(TT->keey=x)Spplayy(T);reeturrn TT;elseeif(x<T->keey)T=T->l;elsee T=T->r;retuurn T;voidd Innserrt(intt x) Noode *T=rt,*fa=NULLL;whille(T) ffa=T;if(xx<T->keey)T=T->l;elseeif(x>T->keey)T=T->r;elseeretturnn;/ttwo thee saame keyys T=(Noode*)maallooc(sizzeoff(Nodde); T->keey=x; T->l=T->r=NULLL; T->f=fa;if(ffa)if(ffa->>keyy>x)fa->>l=T;elsee faa->r=T; Spplayy(T);voidd Deelette(intt x) Noode *T=Finnd(x);if(NNULLL=T)retturnn;/eerroor rtt=Joiin(T->l,T->r); Nodde *Maxxnumm(Nodde *t) Noode *T=t;whille(T->r)T=T->r; Spplayy(T);retuurn T; Nodde *Minnnumm(Nodde *t) Noode *T=t;whille(T->l)T=T->l; Spplayy(T);retuurn T; Nodde *Lasst(intt x) Noode *T=Finnd(x); T=T->l;retuurn(Maxxnumm(T); Nodde *Nexxt(intt x) Noode *T=Finnd(x); T=T->r;retuurn(Minnnumm(T); Nodde *Joiin(Nodde *t1,Nodde *t2)if(NNULLL=t11)retturnn t22;if(NNULLL=t22)retturnn t11; Noode *T=Maxxnumm(t1); T->l=t2;retuurn T;voidd Spplitt(intt x,Nodde *&t11,Nodde *&t22) Noode *T=Finnd(x); t11=T->l;t2=T->r;voidd Innordder(Nodde *T)if(NNULLL=T)retturnn; Innordder(T->l); prrinttf("%dd->"",T->keey); Innordder(T->r);voidd _DDeleete()DDeleete(rt);voidd Deelette(Nodde *T)if(NNULLL=T)retturnn; Deelette(T->l); Deelette(T->r); frree(T);privvatee: Nodde *rt;/rroott;AVL树树/coodevvs12285 莯/byy cwww977#inccludde<ccstddio>>#inccludde<iiosttreaam>#inccludde<aalgooritthm>>#deffinee INNF 00xfffffffff#deffinee BAASE 100000000usinngnaamesspacce sstd;int anss=0;struuct Noddeint x,bf,h;/bbf=bbalaancee faactoor,hh=heeighht Nodde *l,*r;classs AAVLTTreeepubllic:voidd Innit() rtt =NULLL;int H(Nodde *T)reeturrn(T=NUULL)?0:T->h;int BF(Nodde *l,Nodde *r)/gett baalannce facctorrif(NNULLL=l &&NUULL=r)retturnn0;elseeif(NULLL= l)retturnn-r->h;elseeif(NULLL= r)retturnn ll->h;retuurn l->>h - r->>h; Nodde *Lrooratte(Nodde *a)/lefft rroraate Noode *b; b=a->r; a->r=b->l;