From aacbc1dd308c3bf3477529f8ad1224377b3e7240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Mon, 8 Jan 2024 14:09:18 +0800 Subject: [PATCH] 'commit' --- TangDou/AcWing/MinimalSpanningTree/858.cpp | 7 +- TangDou/AcWing/MinimalSpanningTree/858.md | 15 +++-- .../MinimalSpanningTree/858_WithPath.cpp | 6 +- .../T3/MinialSpanningTree/1141.eddx | Bin 0 -> 22801 bytes .../T3/MinialSpanningTree/1142.md | 60 ++++++++++-------- .../T3/MinialSpanningTree/1142_Kruskal.cpp | 45 +++++++------ .../T3/MinialSpanningTree/1142_Prim.cpp | 15 +++-- TangDou/Topic/【最小生成树】专题.md | 4 +- 8 files changed, 90 insertions(+), 62 deletions(-) create mode 100644 TangDou/AcWing_TiGao/T3/MinialSpanningTree/1141.eddx diff --git a/TangDou/AcWing/MinimalSpanningTree/858.cpp b/TangDou/AcWing/MinimalSpanningTree/858.cpp index f834f03..4be1e06 100644 --- a/TangDou/AcWing/MinimalSpanningTree/858.cpp +++ b/TangDou/AcWing/MinimalSpanningTree/858.cpp @@ -12,6 +12,10 @@ int res; // 最小生成树里面边的长度之和 // 普利姆算法求最小生成树 int prim() { + // 距离初始化无穷大,表示所有结点都在生成树之外 + memset(dis, 0x3f, sizeof dis); + dis[1] = 0; + for (int i = 0; i < n; i++) { // 迭代n次 /* 1、找到集合外,距离集合最近的点,记为t,此时有两种情况进行猴子选大王: @@ -48,8 +52,7 @@ int main() { cin >> n >> m; // 所有点之间的距离初始化为正无穷,然后再读入所有边 memset(g, 0x3f, sizeof g); - // 距离初始化无穷大,表示所有结点都在生成树之外 - memset(dis, 0x3f, sizeof dis); + // 读入数据 while (m--) { int a, b, c; diff --git a/TangDou/AcWing/MinimalSpanningTree/858.md b/TangDou/AcWing/MinimalSpanningTree/858.md index a8e727d..f10a0d0 100644 --- a/TangDou/AcWing/MinimalSpanningTree/858.md +++ b/TangDou/AcWing/MinimalSpanningTree/858.md @@ -137,6 +137,10 @@ int res; // 最小生成树里面边的长度之和 // 普利姆算法求最小生成树 int prim() { + // 距离初始化无穷大,表示所有结点都在生成树之外 + memset(dis, 0x3f, sizeof dis); + dis[1] = 0; + for (int i = 0; i < n; i++) { // 迭代n次 /* 1、找到集合外,距离集合最近的点,记为t,此时有两种情况进行猴子选大王: @@ -150,7 +154,7 @@ int prim() { /*2、如果不是第一个点,并且剩余的点距离集合的最小距离是INF,说明现在没有点可以连通到生成树, 这时不是连通图,没有最小生成树,返回INF - 如果是第一个点,因为把它加到集合中去的代码是在下面进行的,此时它也没有被加入到集合中去,所以dis[t]=INF,这时不能说无解 + 如果是第一个点,因为把它加到集合中去的代码是在下面进行的,此时它也没有被加入到集合中去,所以dist[t]=INF,这时不能说无解 因为才刚刚开始,需要特判一下 */ if (i && dis[t] == INF) return INF; @@ -173,8 +177,7 @@ int main() { cin >> n >> m; // 所有点之间的距离初始化为正无穷,然后再读入所有边 memset(g, 0x3f, sizeof g); - // 距离初始化无穷大,表示所有结点都在生成树之外 - memset(dis, 0x3f, sizeof dis); + // 读入数据 while (m--) { int a, b, c; @@ -211,6 +214,10 @@ int pre[N]; // 前驱结点 // 普利姆算法求最小生成树 int prim() { + memset(dis, 0x3f, sizeof dis); + memset(pre, -1, sizeof pre); // 记录前驱路径 + dis[1] = 0; + for (int i = 0; i < n; i++) { // 迭代n次 int t = -1; for (int j = 1; j <= n; j++) @@ -230,8 +237,6 @@ int prim() { int main() { cin >> n >> m; memset(g, 0x3f, sizeof g); - memset(dis, 0x3f, sizeof dis); - memset(pre, -1, sizeof pre); // 记录前驱路径 // 读入数据 while (m--) { diff --git a/TangDou/AcWing/MinimalSpanningTree/858_WithPath.cpp b/TangDou/AcWing/MinimalSpanningTree/858_WithPath.cpp index 1b7203e..e935ef1 100644 --- a/TangDou/AcWing/MinimalSpanningTree/858_WithPath.cpp +++ b/TangDou/AcWing/MinimalSpanningTree/858_WithPath.cpp @@ -13,6 +13,10 @@ int pre[N]; // 前驱结点 // 普利姆算法求最小生成树 int prim() { + memset(dis, 0x3f, sizeof dis); + memset(pre, -1, sizeof pre); // 记录前驱路径 + dis[1] = 0; + for (int i = 0; i < n; i++) { // 迭代n次 int t = -1; for (int j = 1; j <= n; j++) @@ -32,8 +36,6 @@ int prim() { int main() { cin >> n >> m; memset(g, 0x3f, sizeof g); - memset(dis, 0x3f, sizeof dis); - memset(pre, -1, sizeof pre); // 记录前驱路径 // 读入数据 while (m--) { diff --git a/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1141.eddx b/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1141.eddx new file mode 100644 index 0000000000000000000000000000000000000000..75fa7f071c6f4179f4b4179e84e44a2a3fd0fb3e GIT binary patch literal 22801 zcmb@tQ;?@ouP@xTZQHh|ZQHhO+qVC0+s3rrJ#A0h_L+C@I(yf-`0l=o^{aZ4m1L!| zDo<)vq9_9jh6V%#1O>FIPo-(67r8zL3o@>c;Q%1{kL4wL$;q^WHUK>&%?P-D!swv2y_;hAoQz+%H@x=d%WL--J6 z@Xhbr*6)N%z{}S90$5arTgLVUY8|5?7nw3Qx8;D`~0w`gsic@ zu7@PlI2K<-y$Wdc089|;=ob8s(c!zp(WF)opY0!8yO5q26Mz60L3;VlJ zHf#D=g&%EPo%2K%!BXCasqI#YrFOH|R^NIRJ>7;KIw)z2 z0A4=}SO2ai@v+F^F&NpCZMOKLw(bgoa`w7XX#y5_;F>DwB43uzbVxy{+Kn(erg#l^ zSu-C5!s zRc5@n!w6*DVm7O$skqS3Ees(Fk<8C`Is>g!1168RSQuaKQeHE%jKV8xz|27XS~fG*H`)2 zx(x0*HBF66+wHpwf+vsM3I<;x9th8z0=xnO>p6IRu2C3Ai({|1*GD@$`ym+&y^TI! zO`VUBKj#JCDb<`3h-0|*mqHjITJF32IQ^~@U+z|iW2ZphU)?ufS7zQ;hr4nVkclUY zW4IAMOBoFKc)A-MUVMGrJUE2IbDt=_)}Y@ff*uc^&aTQ|djX%zJH2Paah$}YW;KbI zi)rTPlw&@K1oC=KZ9Vg$vlQJhcc8J!OO^Ye)934^Yq_e);8V-6nay!0kd0QJFh$b05AMdzp7^?T@uYErtT8VwU+~?B%z4iybhv#rQDQB+E z^T~&++lLe1-#XuiVYV{e+u6_ecRRhccOkvQ?b;h*QSCY?f?l777B`;09x&C8ZNeJ$ z(~N1=_3=A-eAyf^KNk{^67_P|aXRk@$@X%)+l1}Q=Sx*yip^4-1o&HCZlCLS{xXdr zA#36RY~0VVXReDoMp#ySrCQOv z?}vZxk8BL6f4mO?GS@$P8y$Uu-irPK4qbxwZw)`MIVE2b{#Zipy{>1g*B7k6j+=E0 z@Z>q`5)huBcm2*5ZG0L~vySG5s`cW97JLsDds5|CPo zd^~}Rfr<#wJsdpY!_Ak~f*U!4KxmfVTKSi81`TRNYrq%m<6}R{Gp7*-ulGw1Uub6M zv=If{yzAYlWe$fc6Wi?q@X_aArK1z*P!%n^tSW*9jFupZX0 zUzcrOZa`C=CUjfLx=m&&+e+;e5D<%O-<+s%;+`g+4C;F^v}w13v99oUoIX;Q=>uFG zcs6!(`ZgEbi+DE~BqcU=P#yTeas@NIpQKk--)~q{Iy367Zf@}NVynR+sl103p!0p? zDP;G#grXjDUh+S01?Sw)JY7AV2{}%CwuHzSFRhADZhdsl|L%uy^qel~_h}94i2uR+ z9(7G{tW>o-YY4xC1!1x6(FZw;Tl-sNL;7*GdRZf;IpohAF7}exvygkgmlvc62A~=H= zRDYGXmB;u#!5aYPJkP$?Zf#FLm)3Fqs8Ze$t59p2!P4z1MnBU=NvT44cOCokFXlYj zL5P+ku#A1TL$HOzNnwT)m_o9xhO~Q~+JDzOcFao#wh%%)VmCSM8OJO&bQv+9@jRgG zefl0wJ&#hAFZsXc`9TW&U$b_99tQ_4IKJQd1K6^@r|yP#2?9aUSEXQ#3^4FO8Y)^Q;?)%y}1yjr_Eg$%zKJ~R} z>i4K`-Hepd?=bkP2L$c=l+Tq8JK4aL`CD(8*3VgH<``l&uX&4c`hd(Yifb_5o(JPJwGFd6E4=?b)#=8+Y z`|h48s7`iQ_1@FEU6ube--pws2R=SncY+V><0V!7cx&GS)u?AvKY$|vi}aR;^V#At zq1gxv(DSk25$MrSr>C~j%Z>q}Ft-Gm=?huG%mgmbJHbpp1uD%vIR?|@R-t;X85b!h zqJu)`>>FjE|1|vE=`rg7yk4yy9M8LE?D|<~Yg2fK8PGPt?*{R-KMMo4JY8G@Zh)yK zHxGaP*#O`->1qIMO;FH=wiohrmY}JU%FugX6=p9vFTQoQ;;te}4j1$)91hdkr5CnL z4iyK-7GAD$ZqFdcOG+Z1+8yva;kB{xs&;r3-92yKckU*ZPl5z<^NPM-E&$|1m;~GS z4sk|!r{d+%Dt|M%wDj@i~@)F)f)URt~<{mL-l4_0XDDG|Q05Gr6o*8<%BxUYLPT{%xQ+qG-SwOyHS z+W!w+`?5CMac;W*FDT3{2D26P_1I;YZQ7?1Z@S~o{BGMm9;4rMKbbQ9kEp)xru{MC zGCqH!Z%XH~n|0l~Tk^G1i~n=So*wSb6ri+9JUPSZF4*aIb*y2()zkRFTwvt!xF@FA zy7%Mv*^-W2JX=vTxMm1$>jFD zY4*ICr|y#Ra?HtLu=|E(b#{>py=}(8`?lKec=hH<`{__Y)1>vcjn>6SI4itN1cmNO zo9xf}FN0nq0H7a!*eBqxciS)j{z@Sq#-01-jV|{Mn1(hG*qX1|eC`yxptJ}YBhUUK z3yN>@SjXTr^Pmo#A?e}G<~dC(QH8(9wQK-$P7{FBvkKw3hz%}0ag5LwH^+R9b-vNe zRlCns?Y2U1Q}ahuf?8QbLcvbVYZMVwXXeKkWnJ(6J*B&eK(guZ*@TKTwLX>vnxa1Q$#PFzQfzlaccUe|D3urrJc z5V@nzSqVFV&8O4aw)IZi`i;tvdYFW1GPDBU7H}hUSx9@1J1;*2SkI6V4aayPqLIw> zVZQ=7?{=6Eyzb+X`FEIMdn}qfWS`@;wuUb8Q+iGQ@?`g#{G(`O{1-V&8Las~Y%AK- z|B$D}*y?UwEOaM!m~ppP)Bj6Cr2M}XoZ!stF#pqdzwR^Ma8GgbH*ULK0D=k%Nbl~P zvOO;ang@Gp%h&Jk%_Na(&!_?4)27|`T{`Yu8Drc@dv#UM7hH8suR{k1KR=qwN|YkL z-`%o9`&schj{4>GcdhpRB7uPFA{rrKQGQqqqQT^7gf*`U&FX~2R0}VtKf$N3=<~yb zzd$qeTx;bS$=jQywxU?EtYV9zwudG=Lu$K%`%|apDwWf9jnevx1qb!e$~f=_0eb(1 z`QMWJC#(D1^3#xWxYH0@c`qaSN$i+4NE!KDdp|3Bwbl1ROB%~FoFYr5dC_)ptZ+6x z!q_T%FTaN6_yhK#snkkE<63QE^e}yr`{CqZ`Vvf>tLhkaI7ZrQS{|24BO6(XUZ7@Y zt_*702rX_pR=$i$Vo7?blGI<6^^vRiTFvgBT}E2Ge3TnS6B|Zp`y@6I1Uv2;y2KkN zsuH;|kPCAve39oq&@pCh%URaWe3J2y6L&=11Z3kON1lmq=6^jC@eq>_g;z~X|IyuM z|9#leJ-p35!28BSuAg#r{o940qxN4?^jR+dkY%F1Y%elXo!DUP^^$m=7TOW(F# zpZOoSy0&S%oaJQFap!C@Yi|^2HfztK)Nxlhp8n64yt#mUtJG#Q4---y_kS$94EpXo z(ro(f^(Njzvo!&Q^lgE9y*k=zDOY=OuK5(47E`~I;}cZ z#&FT6Y7>~0rMT?YG^h5vo>tCkaNwX0Z%BAXeLg!$uc;SfFP+n87wvlZ-#o_^2N)}7 zOs{CxSw}U`LR_xew1utP{u9NZpC2nihOVz&NkR>S-a2<=N7uT%safM)K`U280zH|^ zej=RKq?I;VwQMV*4#-DUtD;mO2f&a@LHhP8N~^9GGNeO{HbJPFbqwIB8UPU5^ZB2s z4RhF@qWE2&tVVq(7o6djzqM5r+cW2@xA;aiqF}Udu8Q)iXWMj-*CVTY#6u-Le$;Cn zt;lbk?^kfl9d>4o8=dbq0PNutd&%({NZ*oul*)IIm!eMJZ^x``O zTpXV+sRNZ>EEoy@mDVd&gbqqy?#~35auOf7n=oqRX2wGaftYCATHz^#(W0v_Kigdm3chR%Y_CR% zmX!C@pj8f4E)lXiRt5*A!a`kNCN5&~BaRypAr@q;{Y-!*Q|ER1)iZy;p2Iu+r`y-p zVsKWAs%Mh<62&mHL?O~>Oh7ms`y(uCE}LTBHwmo>Bb-RN;SFS_2-9ObAV#oH(vckn zb5t#S|5k+Mm$j&97D*{1!Zc=GPazC-P2FK`OPcyi7z6#-gFq**E^UhrrnEIlqcsDN z_gLE|M!0tExjb$OZBbvxcHiw^8q&7bqsX-31BH=b*kYS@QtPPexT1%!sYo$>B;oVn zFewr_2S+OjUA^_H-xI<5Dnm%_sCA|WSS5_Q`G#R?iiHgDT(Zhbm@cO=4(Tp->?iE8 zd&=A@GDo(RBB&x*@~sOjRR=s&YnHjz_OYr;7pCPcCaiLH@I;Y;zzw}l=@;1y6fnhF zdYwV!lf`2-*$k)U0q&jI44RFyVhWfm;1*Er6$?tRqjRffnybN^Fg1GakCGyTJMp`Q zu^1w&U#rs0kozPSw(A>foHkWV=_@fSH0_qf7IJ7qlDah`RN|&RlA%>;tzn*edgmTa@ZT^(E=n*hH{Xx~N;Gi^}rehdyf@dU9q|=FwbkI!b%1 zhOsZB&>us`aA(0q7$&VubpFAnMYTdsLe$43)`AY@?k?roN|Q{sTEQZwki6xFsU2w@ z@vTw322=QCFtc(<*|E1&gUwky(q?FV454XQTln2N896Ax4|^fw)soJnqmC*dwDSMT z?yW3MEnwrnrB))6e`u>ES&d-I=7%h^Fj$1Mf#nxFp5c8X#P9?B)5+)!&8-z-A(7ET z^7vB+*N1I}KpDdhf%8LGaZo~2)VdU4K8DEkft-ZVdGsx*<@owSo`mIEarb)6dm}sW zQq_pABm~tOirDO_>ZFU%8IMwhw#OyyJeL#GRF1uC&sXTN8u|41q{`{{BdNs>Y3h== z)}WZVD&lyg!&N^?8>*;Q>3kY5H_WZ2W&mvD*}=|y6QxA6h=x#UQJW&jDmN1FRe_O$ zSwgW$AruCKmF9QlXpo9zR`5o`a7Yvoo2uaDvP8ZRd-aE$=#qXiN>@lYEn~04(!&gF z9eG*APUc908nPgVZiq6>lVm5J=i zF)Uu#^XKf>@S`oUyPEP6En|}5JS1Up6Nd}nhu{@d9m0mSk0g!Gj#V2*ZD0O1?5c9E zlbzs(aH<>LI~`$th!pS<9IEd_IcdPrnqjXQKm=?&(#(IV=x{`(T0n)5Nnmzt>lZKb z05i?_s@it`h^){qeTb~~u-_SB88ObsQ(~Z#K}t_;e_J4+dS7B4Pl2*4B%-tx9oJmv zpyZ4_V`QzGWolMF6AHCJqEsI4iQ1F)k0DKeJySrpUC~ zeO|KNUbavB&)5%Q`wzZKzhUTe?$I9yz?P4$SzVcGoCtvNR$Y{S3+uSfnxUH}C(pmS zGZN?&l!Lk92_?mFS16_#PLE(0(O%G;=$4#;!Hfe>!Vn;dDboKTp6YH1-!@(y?2z8%BQlG|>Fd&xEjbOhGKkkj>Hhtec zd^2tt7PdW)5(ej;s|aYW7*S7+YVdZe1!wYkcdZW6t~r<{xSd?YGTqS%IjoJkP|O5m z1L74I@{|_H!ip&awhTNnEwvW@S9Bf`uCv1iB@4a^3e`%28gkY!%Pd^?fJlla}sRp`5&*nQF3@c`VpWNhZ$El(75El!dqJsP1@kYv5(-lCvjy zjTEbF$V>;^SKOe(B<$ zbZSr98GSFcT?4NRlNZ{-PBy4FN*oL`!{az+=1V88Fm7FF@9DT_+DouzgZn(#-p087 z5Lr04^suV8KINPOD}QG!+YL`hC^yJiA6a zY-n#!ELo#n$W>1^gP+Gu4RVwyl0pZp!1f9Q+AAEG#iQa{-F*}+qS|Q|g05z4njeCC zF*o&C4fUC^^tygn4DGEpnt`UbH9a*4@IcLZvKK@AdC!U$aTd_ddlTH+nkCbuXbHXZ zfzJQl9i5_;|Eawbpi^p(-J~q1)2@Byq!p;5Wo^xS_oPEj!w-&I(>e=NmI*$mie>>H2^3 ztFoY@m*w$42Bc3PPlwg*jS?h9Q*8O+o~#DOd#ci6AS-t;Ai5MMy#`s%*2I>_6_)MM ziJG9|V9slRmpPGOjZL9QY>>)=V55g9jWN57k)b*;ztnMp>2>7UG(XiRjNr_e1u@re zWtBocgctS9!`Nx&TH&uk0p}!Be?ztp#7c=EyMbIHw6wMDU zQKZ+%wJnuBvaCwvM3yP(vC>dz!_8RmTr#OEim>p3eQ2-W_uW^lj$1l6=B*BWdpW9) zt*q^#6bK7FhtyI7(}MK*rv0eC4?<{8DH%}gsmt%`WEe7)NCGfW#ozpvyqYzD-N)x7iqvRumoubJ5eGqWs6FQpn!l|3X?M^ zSg!|~8r2x?*QDhx8(k`K_H5;`w;n}=$)j>$P+^D~)sxeqpfG|OIcUb0LquMO!iq^W z7lJgV#+6D`gYF7niMI36njEaHii3hg@aPjUQ`qJrnms)yZOYKOZafc>7crTBI!xuNV%xow<%W47Nb&xAd)l5DE^6Ui$-=CLCM9bK4>I5 z5gU%0uU+f|G|2}R(KWF`5mPHrJZM`L~r2yDHMrte))KT`|Z!1cN}qK z4(}Zi->I}-(oieV!w$jWn;DfIoX%KhGaH`=s))QgGM9j0aKfkBr>mfZ5z zAqi2UJC*yMjn%=5&8vV??6F<+;5+?@x-q?RcjlD8ud^JNu~?o&~7D* z&QU6s*x`Zed#MMB)6D1AeUwD6Nrgc}+U!BAa0Io(WYdE;=?^MCfGL|Nc9V&QTZ$d3 z88K|xxOrL_se-_m&Ni}aC9yCZko3BzU*7UqOiGdggAXvEiu_#~Ok~t)w$O=dd=Jh7 zvwk5c}jF#n&7ktqdb^V#}3ms#tJQL!KXq$f2E^oxZiC)FuA| zq6J(MDxVO18fph#j<+}J?S^Y-38HK<)Tl{nQBd@?5PID3noZw=9z{-%xiuCeq#%TG zpqAF=-M}?QUQ3@Az-DL~V?k$2Yv+>}<99bBohun65syq0WT-TRJen8>X;^XYcFY(7 zVBv#`TGX(jSJC|Sse}4D34ZdGG+}WlJ`!UaPn4)=PZCnaS^Y~t^c4j97eV>5*hi zHO(mP#9KM5hJ$wSR2n?2^RP(^fx(}aB^v^2WJn-WX~NRTz@cHWWDR>*bOOo7L5CI> z-MTPmKLMzF&X8xyd6NMeD5xNH#dn_8QZvL0H6WMB#ip4gXSonl4foM`24$u@B6viE zIHoOvb21$pXL|NC22pE77_v8u<$uvLLuX*N&1c^Vc~Kt{ELKu6svSP@&A8R?JH}=D z%?l`NfPbbHUEK&ysRc|4Glq2iIU<~#6)Y}NqjLfVK zcvNyH4GIicABuqO17ZdxIF+i&^au|SZoZvpqb^lJaQ+<<<}te%L1Y}nJ`qNmgk6L0 zihONDUvnVOit$$xTnFo3{*=sLnOaFVw4*-o68ji24aB|ND#3J)`aa*N6vI`$y z@Z3a|NsM%63r>}UW(bf?qlLQ~(iJBH+C|i|>P-^K=;kN@!mKaoL=e(di*8AxVA!_| z_9e@RcRo9vQ6y>J$EPM2eitWeW7>xnh(B)^7C0a?Fbt#!E!-lFUW@M+ZrE2kavt7I z6342w%4QK7E#yaS3sPG!%+w_8S1H%C2ID4g>uJKU71Mhsu6^QLE>hjP%Chr#vWybH z*1Lh#h5|>e)2ek7HbZq35MBH`e4tq34s?)r3 zzNbf**MN>U3yT%iBp;S9FN!(CQdFhF!gyNcpFRYU*mY+JHiqJvvt=q{S$TQF!nom- z_EL^GjnWgx+)io?ehXuYv0R0jk<2VC7x!qrA!{_Mg)W-M&fxPq9hqHRo!;O3Bp-FABGWD*?{mrMdEGX4Ez>9_ zTBW$cZq(PggiIq56W`TmZdwbiJ}=Px;uY*HvzdCl^Dt3t&TxGxx7x@a34JCF^o`36 zXd<%XSHZyB%hn7BT5hE-fBrol(B$qj?#NN}E?v0vIuh&r9;G%MC08U;^4KjLPLv`( z{K~5}p%n^drl^VZq3)b*l4{|_ zTc~qU2d+uX-*;S;I5*h}Q+q$SSV@AkhX!1t4HI*p@8G9m+r^(+5=sYJfI1u8`(J4PbQDEWHk>yK|uZPwJuikULmpRwrsnIEWbwtL7 zK1|;6Dw55bq&9IyEZ&P?ky(1eS|FsIVCx!-Cpx~{6WOlA%mLRXNbmTq=QCO z;IS?Svt~X7Lw+~oQJ*0j>O-EaxbN4=~>!e#_0LbGiWLDP+Q+mXl4L$gUT#Nyu& z8WpEv(Qz#x*EJ!vDZnE`$EsmGix5E_24{H!Lq(*mN>(t08PWtbB%r63#FxOc%u6_{ zTZIf30`a@yy>C_4$fGgV7lGOewWSZGB1Zw@NzoSWws>^CP&iy2Y4DFqjtfBOQI3(q zR&WG0{@v_n@4D2OKsh3f&@0;pCV&Vfm)XFWvha-J5CV@@s!Go+5!~YfTCmocERduZ zId}VAA4^7_146Z)9i9igN#WzjuzTWwk%cv6;z94Ev2G?<#7d0POn3!wLYbM9#sv9A zCT)_#2+sB#(-o|SzFFa^aeWjR7^cL4x-_3kqEN6ov{VrCBL8l5WWq(qTB{9%)~P9J zdRYK-4WjtzQ0N-1kh3MegM4tfPP{G@(`^!#SF`edES&JEYJ(>V*@Uos1Q5J2%24BW zGYFWSRD24@PAb@wG%}tPzSyoJ>M_g38~T9p zf2E{no@i727En?)I*Gr8(qSC5xS#}Yg>SsisvFyEq1o;uCgDH)|sF;fClVUa|ilyAgxTlxd4d`{!2}*t! zrXDLOyW$|z3+?x>cn%%o?cx|W8<3#ux@;7`oJkxD89lt0vgxpOs^m(qCeB6O_-H?& z7{}be$=tC%MkS}_!cKVc>EUf!>)-xFqGY0SMnkI7>NvHOe~psL&Z41F*=R#%Oq55l zJ!w6K$b=&h5D29`7m+q*z;}vShMyc6*RjeE!9FUDq3eHPdkn_6`Hos{g|MuAbdN}m zs4NbagvJQZMG#nexz^(s;-#R7i9FMkEh8J1HQYm$JA`6Jw4Sxc)+Rx_{N}%zvQO`W z4&4YBo|{A)XF4Zv9$Xp4I=M^K;W_u-N{qK;kDsWf7)qt<>7Y<^7$rpC;kYmyV$%)B z<)*EU!x{{=vSqSY5#iRs-GM-d)TjoCcvJyJw$mG45~)&2Xkm?pT3I1cCpqSPWKgi8 znul*<+go(-7nD$pEbTX?qs|=at5z?2aaDQ&XW!+Qj9V`^{?%?HVf4vMKvE* zSf)WgNmCbdl^MLFftuC$Ven|F4`~c?FhG_%T&|B^iCmhuwvJ-D>q4ed-#X1s$#phU zfh(6Qoin0cAogN{+f6g8}0x%YxQ>sbuG+J zHjtWIbP4cUYT-z+$cSfTZ5*V^NBb5nE7lTp67DR82onL!ZJV?wx_+l(!X(g%C)35p zJ=ch2%h*~jI2DN#x<=#zN;ClceACOt%K&m0AJ=bahJF0UO_L{1ZJIL z4-#Dmr50AsE4L94xfnVM)PsqrgQCp(TV(!<;WmqQ&MI{B7yM8N_wDsFAPF*s6A1r= zY@dcS8A8Rz^>rcltV3fs5h6uKZQU3jo`TXA0NImI%yMFi&z7k=B@{xPcaIG@vwdOv zs$6HjZF)=n_$aJ`6zaTbmFu8vnC*CXz_2D;Zs(s4nvzN6cgW2YhOjeo0+MC{Gc6nB z#Zc&4HlSOKEL>;-GOYrZnJX|3mZ`e_yiBumz*cTZF)&h-1;mPKC}0C3+ZPV0uL8}~ zD)v}KPj1dXCj)RX3}%S>i$ijLT4M1l#Hxnn1g3HPrjgg0EfxRk^IthaAuG%4v-d-{ zzEDYpr4j@$R|UptKR!!79KtF}v*{3}oq(OUA%gNqhBV8UY)tG*A=Yw$RF!8$y&)=T zHV6)Z>@<8KQB*8ayRA}tiY(RQv(6F(A^!{6)CO7B3iU>GO4rp3s@~PmjLV++nt^wo zcBdC8WnlH-lU=nTADM(b$*FIg9X%P@vNS_vAymU8k2aN5U>?g>vW2WSp7!|kbpsxb zqsz!rBr2{P@@%nZO@cu<4uOFpQ23w(LY25iT!L)UP;4A`lbcamIg(~JOB97Wz3o{< z4q2Xria26>ppr7iZKa8Gt) zfI3~!*P@*_S%YaPQa)0`q31l^VgVM3EC?tQn!V$UP(g$X&tW_ovV(xp?*mJF>6PJ$ z=v&=vRhoSqn~CUl8l~+*jWk6&U9x%i6>HzZ&25}XF0Ei+B9hxjY@-Q7-I@44WBiGBoeA7N~oLa#9dHi5723FGu+VB*kP|(cTcl!#@Y$D5*3UExO1b@ zgqBDsE))pPmK`wdIoLw`Wu{$igDjJEYVk}o*L4>cLRp^mFPD+=aOm|5fqrohSTk(p zXQgo$R6^~Bk-Kx)HD<^$uL_bDcTsM(ATx>KS-6Dx;P0#v}L%5ex}T&E`wZ zRZo~^Ut>=qjpv{=cY_WXLbX`PHbvNIO_A3Mkoib7vs~$Hpfzd_L`joSsHN<28Ih|% zsHP_F4D7aO#-$-%(E`tXIcbcxUr=By$w{6|a4QVa5an4exIv7orpnF<%OnK=9~Gkb zkWY8Op^NqWW_Tq}7dMOnmBdTfY#Q4j^gME|6<@t!hw9KUO@0BS6TC&}VkqRK8ZrGf zwGnv6@Iq`5lj7?o_-~@@Te$cVH`3D}Sdb`+(*Y(mRT69zBG{aP_lsFhSF<$vH+dok zGXw&#XIE6It6TJsja zO7f`Poa|#+J2gur&3S)g_PB5-T2>4O=E$;{-jd;D>(!VN zQYGwK3^7pDLYYENTpEWH6-rxRqOw@tR2~^8M?@rtQ(&5u-6;#>bY{l<5~oX_W+>wa z*n3TrH^(@|G0*%HY3e&O2-cHbVwwqQj)Ctu^V`qXha=+DW?niQbqzTuO46@^>8;1e zRN?@3c9}P$@4Iw#KO4oP)63JBrPakv-PqtG5N0&j>fkFQe|qo+YCrHqEK@zpMg{J$ zQ+hK|H|Lj^w3SUeq(&Sug}yY7ZWcgvHaO=yxSD3bh&JuXyL;A+&o-CDe%z2O$8HLT z3}vV5&TPX<`>Z(~Js)?;D8@w11s}3f)@ zgXolb2GjRIohfgl=cixfucMxZ!MM2ww)1f}uxp>jqK2NHJpGwsyUVWL%<-H*6OYEh zSSr=(7Mc3fl_1qiG0YhGkg2)9e`B)YK|&7l%XSc#Dch_9bq)8>&VPjst&fT%8I=@|eFxwlP)Ug8X&~L~tS`ORH39;E7GEPW z#rmp?)<;v}%FqT#oshaIVu>xO|;B|1W6YSt8@)J$G~^D`<)HYi`#|h z#%6a2rGq&$*TL}!b`y1TSu_bTlwEXJHp?@Vt%@*E+{GDz7`Ek1+l1@LK8T}HmiI*K z>R@NsXkubf0$O64qCx-8Q-s;u#jYSnJAE2&l)dK%`Z^`R70~MDzm2l=|LFu;$}+Hx z5@!qZHphC%@%8web+rj_ez|&|U!kWnss9xte(hTgJvM|m6aDee4?b&X7BSM>v+Qc8qaKoC6ffG_9tP<5{*4S18f6PpR8b7{S6rGICymGS8k4Bt9 zYu@Xj{<>aPe8QdTYI_?!Ow(s<^ERu*Bz(w`%hfoPYJRTu6EALmliAd$&3sK$eGpy7 zQKLo~SV6S@lfDHNoN8M%1_?m-<2CQnh0md1K)S&O5Vnua%M*AZKxIYvt@rNl-|wA} z;S2`51Vp0*y$wg|Nt!(*t{Vr4OjHsV;IQD$EA2-9~|8B!{{?~^2 ziP0m#^Jg>Q1t3#@wauTOD|@ZLX`f&ydER@*VD9jrzWI+)Wv8p&d5tN#ilf21(^Dh8 zsan!@g?(JG?}{#jU7zFIou}Tzl*&2KfF7Q{gdhKHITO89f(f z0v!AhN1k;m!SiX3W6XVnZhO)F9|yUzr3qomX?N5maJBgV+psyPpa0(tn*qKzENzn>Bce4j1|KhNg&Xccw?ZYI{g zA15?^-tQdx^wQB3`XBhI&aGb)`aSPc82P@BU#1KQe(q@rKVKmg`kqHi6cPj;=Ja{q zAM@rqZUQcB6#8Caf8V{X^#^L#>1PqR#SNyF%pM&_ME=?pSrYWUnIiQ4)==2}N%sDn z>JRTH{5fZ=S_u07zP#x7`RPRrxaEfSDjHd0^gAAA{CvI>^gS6a@JDd|XW2(_?BwGd za`!c++~9L#ssEG57i8>W;zQ8;eWpKjKj3{^(5b&*^5M1p=WICObv4D{3uJ6kg+9?I}|9WCWLNRHS^`uqnK~}2yo_0hYY2|>`C60X z^&`#cTeM)~D#S+J!fKb%TV*vw4_Z`E*3f&UHOy(xPNS_>hq7B6BDF1@HIz9gY|-)Y z8)fX1-&6ejm}qCXWo|}?r24%9#3Ob3o!s7grJFyH|L@cf+3n^l&%bG(|15-m%h}A< zh0)+Y_@AMl=EnNpGfGr4^fa^6bIocj%dCpZk~1>13KP>Z?P@giQcJChP3?!rP0-Ra zQgpyo)U&_os8%7Pfq?$Mt)Tv2EB`fG^#8l5@Fdo{I#3`W6G9*$=zpeMEzRuA{%e3q zYsP*_2&s?s4x#$0Qx1>Uoo-as&I(L9L>l$Zh3%QA@%&GciRDxjEMj1&cOdS;K-f?a zZg4v_xx?UP!WEZ$v8XgP{SN;K!QAYu|L$~6v%Nh5BHv?hC@JSHJe{2?Gf5x%pSoSv z+lSv;4tq1a?GEhSek??!9U}9u`2WU82AZN5KwX63`23%)53VTbRFzxv24F>&&vM)y zP4`-}Rn6d=_u;t-zAqjxUWd<)9L$Kw(?c$b*$-9I%5B1t0kDZ8O=4FJJYFT)fnlhHE3upzgVlS zy76B4tWp9DZLMuX3&r$sCno-3WIJ1J$GTonwiA=H8Uw1X(0UQp(hy3lN~6hX+Ut9W+9e^nDtIp zSa1M<`@qF`cE*0DHIK}qTQZ9BC~WE}>Hp~}p$uYJvt$JQLb>S64zxqvsPDU8<1pQr ztodyomX4(MkJo&l+$2(%XWter{;^Un)+tw$OJe?@O({xyTXMDppl;z3O_uk$yIhlU z*zsA1ISD(W7gEPNacY8*x9}r8GRzM5)0@cutDoy9@be0PobZ%v^y&FPkqYCru1pL; zmGL+yHKf(X8di*f3FDpYA6Gqc$t5jc6ehyp+~+CqkCl zXNI7AGcsVe1{0#RCwf}xmC&)bmO?U}{bAUInLR9U4oCfK8AdP6p?%8{t&u!Rj8?Ws z0*@i=0yJCpv+R%eCLHmlge7levEhKMD>cw9?br}{duD=-dIz_XPsvcB6gpD3tWqHF ztPld^?^A*&wLvp!T&dZR7vH-mf`)&QUw2cev4?uq-ykYt!&5i2kvAbp8RK1@(1Da`v-MBAo$CHfk0MRTiV%cags?VQ`1&C9pR&WW$zw)x`DnpQ;nAsJ>F#o zmO>r%I-Mo*qe+GalTw}=8MR^=tT^dq1pkJ2cy>Y5_%Vv`lNa%%huQJ>5spWZ0Z(&rJ$&=lpc_v56@M{Aq4Xwsg!&T*aM>e`QkzQJWJ0-NcI9a;hJkL{xv52(3I+>87>-LB;Zj1)EE;n_FN97&_M+YE(Pc!}xM z+u&CzRK}%b!u2BRUZXWwaEr9<@bbTXmHHPi+1)VksqPpqD%bwu{>Zh}mDWbKmK zHC@<&ur!kJ{+2VS(+#p_{cTXx8q{>2-<KEQpwnw0o?s{gj6!@yx0KnPTfKwspPf6eU zy0gqdOWVLz&W>9f1L>cwKbp!d&Uo>5Pu|^XlgOu`pA)U10swIQ9U40eWJixCtd1=5 zf;ddl1I;8lrZsFp59~$H5b^vXuW2CK^~KX~8QgMr<@H8Gfj9*XXEe={9x!hb)4|0o;*Fpt$#_Ad+*sAu z)|851(&xKMKBil@LuO^Sg`*F)ykD68v43#bj`0#$$_~#_h{tFEUmF{ZNv3QD0tUkP zSK=ELr=&?(<=K4~gY<{vr1h(N=_|heI)^E}ih=+e-zta6Dx4>uY#Yclhd&4xo4lne z4MPsT9;(2!G-~BNcV+YWFA|B{VBE)TLXv4HLLP<`vnaKEV(w}Az5_G+#(uP|+6+hB zn#ctCq?sbJVjx&bdb$2ZvDlJFVH1055M!{Ajf}xg+ZN!c>j7+GTn4f9m}N{#Yd)`J!KE4AObpMKSbqgYt3M=f&2FNytO zW$g(PwquoGe3(~Zi?*j*J?RCk&GJ{N%CQ(Hsr?Xx`J|G#u-0;IZ}FtLrFGJN z;tD4&sOm{}W%mteTPB6{Jf+*LEyMl){+~w9Dk!ey-P?qLV8KFwpo6;xhu|IvkRZV& zKyY_=2<~o!yK8U;4P>wZ26q@7f;%Vs`_4JF_rGdaowY7jt&4uDyRY8re%>GUxef}x zeBME2^r$2QRqhqFwr^Vg3Cbh~-p&DmCy*fSUHah=Vx%1fi)bzy@s%~Fkk&m#_48F# zc~#)6B*9br^JGnYZokn3^DamxB%gboSKH6Mt8u=!D{w+tp3c)~Nue^{Escc)11t-x za5+BK(pco#tBb7OCr|HA{vB&aYA4bDGD~#zVYhnQqn)ip-|1IvDifx|g&52{Dpkbw z6BcM{#{{;w$9hVWvKvQ1*mK`UV6{m`BfS4{6W*$$=Ev@;VC zo{d4cniE7I`Uzb|`1mrMA(0IETUJ@qAM<^(I4r4QG_%1>3`3jxPq}Y3`*I04+(ln3 z_J)*fs!nh2!Cm%cZaLDeH^y9ScfkNE-loRxlnIr&m!IBH+_-jUVEvl03tEv`2I$5^ zqwP2kHwiB{F&JjspkUZxU@4$D*;B5kqd~doUpcLw!e^HOoMLL6nJxxqY0u8QC2- zt!D(GAbNJ*lQqXdbCHLM<&iFnO4B$A*-LadF+7{r^`qF7~xTtej7J4$GqmbtD z*tYuk$##3l$&a+hrZX)j>EQ?(oJJLBMSvr1^P5;UMn&uTWf2ecUSV@UsaJkB}+y9zTfkQQEJ!ie1 zG>5U#NVr?)w$Yg)&h3TxH8v{t9v`EZ>xQUHP`{Ml3HW#wuY22kK6Gkg^K z58E}zaV2%ii)wD+?ruY~nNjlKz&T~y>RRxZCf9RxotHHEJJ)zO!E=sy@t(4&bnFh%JVDVPfn;u!|F1 z$`#bw$FR7wnBz%YLhfcakpukPf6pLGH|$A*Zq$hbDt3?EN#AGz%FZGwJ~Si8P#K1%da| znk3CGB#V0hvKMgCZxsNi2cGo|D%~huCeI8&KcXakk z5)jrh|8rc+clVHz+9exaR?&9*Va(}lBa+>Ujd0Z0USf;D&zZL7(ehn}*9sV-4kP$J z*9z!&u{i0!7_`{t3nGvhVsUc%(>={V@IgSPCPnSQL}q6=id|}QOv0(=Rk&Kf$FSzq zs;VAcm?8Q&uT~{sd3o+CjX$7XW?q!GXl>A~c`CNgTjZySDx8Q6-G5-e^WDfII1nf; zO5rMjtbyGh0SF|MZFd!Ws8A%Bm!*>~8uytCbWcBVY#|xJ(X=l+wTdjKZz!c#&6%2V z#^zIwP#XGuF7~j2CH?9B*bCi-?IVylrFR?1jBqfgG&h!ebBs}8YiO^H=XlU0tn0*4 z4}bCu=M^8lyg2;q-Q9B!*e%RIGcG1Wr_HGQLFUg`1a(*7!-xMSTGSX>6>KZxT4m~tEACPjRTWnTq<06U{_qc^U2 zn0w*nXzLs+=d)m>F+;_I*Ayf}R$oi|#Uy?#D3H9W zZFP|zhVsy9kR$wNAf?9VtpPVP@9Q53L3$Ons7tPEOQa$_)re;&5=>cO$t97Cx)=to zS3Mu@h@URx*&AZkenU4)=yUt&h&x1nbQMdi5s5x5#9VvPX(tpG0U0FQIgsPKOd^?u zLTm&j8UliqVwiY>1=VYDvGfo|;q*}H9hUD*jUV^}p0%=RJzJgKr*gV*3ncwCTDI-d44XZKk_y&h!(Tc-TA5=p&?REk*1nyK!Ea zzpZ=K>hFU!xF8a{@91#C_IsC6*9u&qiVARxV`q zk>*_XJWIx&mE%=@lT*J{)`+Njhgi?UR9&#fg^){J%!nLI5`XfI=zUx~$+-J`VEfSQ zyyxE%0``5Nz4f;Cl&r%nhVYib!!h?uXKxsHvwgAs=p(&H=?N37%E&Z-M+JM&l1U`! z9?j*(txfXX(F9xUrj*X4b)WzfxY1)ipWC~ZHi;_zr zWw*3DEXI^9r-Q~42m`X{;1PqE8lBPz??inYf#Q~1REvx)JMrjO>GviW;z+va`PBqZ zHcdtd+h{xQN-;0qs0DN2roM$%Ni2k*(I=J&>)>7Av!|M$!|rCMXk?XnS3RtMbMPvx zbi9yTAPF}w#5qWw(?OS_gsNM7zuB??D-nB2F!#zdpTy?^R1IN0D5 znDHQFk1ut$y)=|{iJK7E_{a_HUS%{QbnWquxt}N8W>6^p#TCczv6Q@C!kDdgh0fAbe8w<|8WRKDz$mxNBHGQ!ndeGWvsm2XBmdw< z+Y*_giG|Fz2v7+AY#}Dx%|gvUSIH62`tx?~pkGQ{$mo8bX1?G7z<6QVSMibo(0}#e zLuA(VFlYkdgZscFg%_uO(5Rl1bwx6J5nLSN<#PDqJ*>P>k;)FjjLzN9)aR1#Uus^I zGz?-eVj`({TYY#^s`JGI@|?=Db^c2iAk!mVLlGv*e6DERNX~L{#K05%-4L@(4$Iew&bMV+4vgwEtd6FzK`g&h-b90K zch=fF8|%kB1EK~1LX}sAoqD_Vn#EdUwsi3}#mS_MVW-rv(!tza)c1!2xuT_Nh@!q0 z|J1tK)9SWy1^CT#164)cWiZtrWo`_o-s0Q+Qc9 zh|_J8jjDkWYney<`eXzizZWOjY(L%IX1%pN_7v!m85=HWxd+kStmu_(4&JYp0Z@1&Kg=DoLdEJ?1!! z^f>ED?^_R`BX6RDeJa(Cg(mF0*YGr@tNhj13 zLDSOA_BOZHZp(yCH*T8u8it?FFu%HpLO}PHRX!WhEUKT2X}^sHSl6nG#ne!4QZTi4 z{ElSx{wRf1$tH1qa|6Vmsv9v2C*IMfi0d-kv%7Hoc93H|sD%p0(p% zME^|i7o9dzXVgB{yCW+isV7CYzLyw?TON@TT3(IZS%F-9ArVoBXuL&Oy< zdK?n5d4oE`Kcmrcau&Yfvem}DwwUyy^JzBUV=J=oe0`a~ZB)cW`J>f=)Fs^<$y1aK zo?;kk3?R)`Xc^=CCU6t7gAtsX6RkD-@~#zXUENBNOhoUUbLqZ)@KdLqck5t>vNOfb z3kPj;p7^I+{+@{<8J$jN%SZQ{etu7kyNQxb2A^&?l+UK65mRVrb?Nxphs0w*9C`tP zSGJg0QG^s*)Og#Z7fwwWNM@W@lLjecZlgTEM#?d&?#BFny)?Di(0b#uMJ={A-b43{ zaisZfRd);sP z5-qQz8zLyTdg&5C3V)@HN67|CI9x-e3`>w`)cK9Ba!12=bO_!#?_%P#np2;=C`nTc zY!`}#aO5`tao(5v{pkfhv~U!-B2tCokY#&K-(iNnJ>0q-BFldo0dB@VwPt@hOg~Q# zZKJ%|CB7FhIkT3rJzbT?eUMrd(fts+G7Y~~313_;DWz#(p$=N|KXLWNLSDy~GBYLD zzBAr-P=$e;zh#b6LTrJo%R|W+!|gYEbJs#4MyNKcniwJWAiEO5uef}z38V%V4~As9 zx}DK9MAtSe$p%}yab=#&M?Ik*gK_l8^pAx)ClX-SzWX~kUl%t(&x-x&wTKmBfcA;E z%N_PiM#k>)K2ZJaQySQoJJ|ik+!S(Cprelzd*+h=Q%n`K5Os(OoetXW>)U!wSKdj4 z@66lD*9^VB4UMkyBjF3J-arLVhrCGNnnB2b*0!dTsmJ{WbhP7i*woM2P5)EcGF zeyE|GN@w`^J(Q#=nAvzXZFH9!p^ot=c=&x=hP~NWWDRK3?U<4^`H9{7ty<8J2(= zDUpwuA%E6cgffel3e<}(?u)_+*w#vk{TOV5OUgLKx*zMtP|{T2l@AgBGI%AQaBPsh z!Q~G#X+s|Q$i;}%M&A49T%jG!H!YNOlCJ6qv~lqnBs0Qum%Ov10S`_LSR|35U{yEC zOQPyINVqm1MAqgDx@kcT{C==V9_5uaiJ|!+2wqV1O^g!BjLLm^{^{N zVIx6O;!;?pT}{Q2jGRLgM4}#>f?i9rcItKVMlw1O!<7iwFWN4?y?emtZ1Rvb)vzI! zU2aEyf$I^RHJ90uHgw#7VB1M==fTnGw8)IkxY^Q~WA~<;3j*WU9}rbHz{>LKs8a6Y zk3y9^1e41#u}g;+YN9nRH^~XDcdr9zH9{cdxj0c3H~Co`MtG*Im|du5ty3FvY3Y!X zd?Y5|S3)To7It!<_(|!S8tZHWg&$V;pih&2)V{3{Q~Hy=z#E3$xH=ngbVu^9guTgx zXYnoj$>ie(J>{23bz{i|{Uy|&Vfd0V?9x&ezNhd)HQrgX>(2t}Jo=RCfwfM#`0s%4$uzJIqOH4Av3Q zLPYGCyufI_1!iZ6%z)*3h%!2vs)~3ozEdRLlrTvMz+hpMo1F3u9#yiY#!1VQk2xkb z(fQcLo2ssh5_A4=Hr!9r%Nni4&h-Lo)+hrrNWY|hkt=}-(AnV~4ymYNdzKp{8D|OO z+U8VFb!#!zzVR54F2?o)e7Ed8x(iok9>WYBkJ5Gz_1x=W7T)p?7YY}Wrzg;TPNsP# zR7t7qqDkPu$so4D=I8}`ONQFzhK~XVrv6=9SI(CThgVUKzadOf=l4v|IZlDZdN|7S zLFUGDf&7uuBesgd3&b~of6LeXOI7&)PjkRu-@m8rs;eO*pkO;@n*Jx^pOLM9N1Xl% z?){Gd*MFt_QvvxqWrycKg^>Rf1n>We7yq*wMc)60{L}aNSJFQPj=xW* l|IfSPzmJdlBf0$Z=J;> n >> m; - for (int i = 1; i <= n; i++) p[i] = i; // 并查集初始化 for (int i = 0; i < m; i++) { int a, b, c; cin >> a >> b >> c; - e[i] = {a, b, c}; - } - // 排序(按边权) - sort(e, e + m); - - int res = 0; - for (int i = 0; i < m; i++) { - int a = find(e[i].a), b = find(e[i].b), w = e[i].w; - if (a != b) { - p[a] = b; - res = w; // 越往后越大 - } + edge[i] = {a, b, c}; } + kruskal(); printf("%d %d\n", n - 1, res); return 0; } @@ -83,25 +90,26 @@ int main() { using namespace std; const int N = 310; -int dist[N]; +int dis[N]; int g[N][N]; int n, m; bool st[N]; int prim() { - memset(dist, 0x3f, sizeof dist); - dist[1] = 0; + memset(dis, 0x3f, sizeof dis); + dis[1] = 0; int res = 0; for (int i = 0; i < n; i++) { int t = -1; for (int j = 1; j <= n; j++) - if (!st[j] && (t == -1 || dist[t] > dist[j])) + if (!st[j] && (t == -1 || dis[t] > dis[j])) t = j; - st[t] = true; - res = max(res, dist[t]); // 找出最长,不要累加和 + res = max(res, dis[t]); // 找出最长,不要累加和 for (int j = 1; j <= n; j++) - dist[j] = min(dist[j], g[t][j]); + if (!st[j] && dis[j] > g[t][j]) + dis[j] = g[t][j]; + st[t] = true; } return res; } diff --git a/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1142_Kruskal.cpp b/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1142_Kruskal.cpp index 76387a4..7b98cd0 100644 --- a/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1142_Kruskal.cpp +++ b/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1142_Kruskal.cpp @@ -2,13 +2,14 @@ using namespace std; const int N = 310, M = 8010; -// 记录边的结构体 -struct Edge { - int a, b, w; - const bool operator<(const Edge &t) const { - return w < t.w; + +// Kruskal用到的结构体 +struct Node { + int a, b, c; + bool const operator<(const Node &t) const { + return c < t.c; // 边权小的在前 } -} e[M]; +} edge[M]; int n, m; int p[N]; @@ -18,26 +19,32 @@ int find(int x) { return p[x]; } +int res; + +// Kruskal算法 +void kruskal() { + // 1、按边权由小到大排序 + sort(edge, edge + m); + // 2、并查集初始化 + for (int i = 1; i <= n; i++) p[i] = i; + // 3、迭代m次 + for (int i = 0; i < m; i++) { + int a = edge[i].a, b = edge[i].b, c = edge[i].c; + a = find(a), b = find(b); + if (a != b) + p[a] = b, res = c; // 越往后越大 + } +} + int main() { cin >> n >> m; - for (int i = 1; i <= n; i++) p[i] = i; // 并查集初始化 for (int i = 0; i < m; i++) { int a, b, c; cin >> a >> b >> c; - e[i] = {a, b, c}; - } - // 排序(按边权) - sort(e, e + m); - - int res = 0; - for (int i = 0; i < m; i++) { - int a = find(e[i].a), b = find(e[i].b), w = e[i].w; - if (a != b) { - p[a] = b; - res = w; // 越往后越大 - } + edge[i] = {a, b, c}; } + kruskal(); printf("%d %d\n", n - 1, res); return 0; } \ No newline at end of file diff --git a/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1142_Prim.cpp b/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1142_Prim.cpp index 2cdf756..ab94bcb 100644 --- a/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1142_Prim.cpp +++ b/TangDou/AcWing_TiGao/T3/MinialSpanningTree/1142_Prim.cpp @@ -2,25 +2,26 @@ using namespace std; const int N = 310; -int dist[N]; +int dis[N]; int g[N][N]; int n, m; bool st[N]; int prim() { - memset(dist, 0x3f, sizeof dist); - dist[1] = 0; + memset(dis, 0x3f, sizeof dis); + dis[1] = 0; int res = 0; for (int i = 0; i < n; i++) { int t = -1; for (int j = 1; j <= n; j++) - if (!st[j] && (t == -1 || dist[t] > dist[j])) + if (!st[j] && (t == -1 || dis[t] > dis[j])) t = j; - st[t] = true; - res = max(res, dist[t]); // 找出最长,不要累加和 + res = max(res, dis[t]); // 找出最长,不要累加和 for (int j = 1; j <= n; j++) - dist[j] = min(dist[j], g[t][j]); + if (!st[j] && dis[j] > g[t][j]) + dis[j] = g[t][j]; + st[t] = true; } return res; } diff --git a/TangDou/Topic/【最小生成树】专题.md b/TangDou/Topic/【最小生成树】专题.md index 83f5faf..06ad61e 100644 --- a/TangDou/Topic/【最小生成树】专题.md +++ b/TangDou/Topic/【最小生成树】专题.md @@ -143,7 +143,9 @@ $Prim$或者$Kruskal$祼题,直接套模板即可 #### [$AcWing$ $1141$. 局域网](https://www.cnblogs.com/littlehb/p/16044103.html) 最小生成森林,需要注意与最小生成树的区别,两种方法,推荐使用$Kruskal$ -AcWing 1142. 繁忙的都市 +#### [$AcWing$ $1142$. 繁忙的都市](https://www.cnblogs.com/littlehb/p/16044984.html) + + AcWing 1143. 联络员 AcWing 1144. 连接格点