第46届ICPC亚洲区域赛(沈阳)部分题解

E Edward Gaming, the Champion

输出字符串中一共出现了多少次 e d g n b edgnb edgnb,考虑到所有的字母均不相同,顺序处理即可。

F Encoded Strings I

按照要求进行替换,然后快速排序, c m p cmp cmp函数按照字典序比较即可。

J Luggage Lock

考虑到状态数不多,我们强制从 0000 0000 0000开始变换, b f s bfs bfs即可,可以通过本题。

队友在 v p vp vp时写了个别的做法,留坑待填。

B Bitwise Exclusive-OR Sequence

首先发现 w w w的位与位之间没有影响,这样我们考虑将 30 30 30位分别拆开来做。这样问题就转化成了一个边权为 0 , 1 0,1 0,1的图,是否存在一种点染色的方案,使得两点的异或值等于该边的边权。考虑到如果一个联通块存在合法的染色方案,那么方案有且仅有两种,即将 01 01 01进行翻转,这样我们对每个联通块进行 d f s dfs dfs,两种染色法取 m i n min min即可。

H Line Graph Matching

首先考虑一个联通块如果有偶数条边,可以证明总能将所有边选上,如果是奇数条边,我们要考虑删去一条边,那么我们如果选择了非桥边,那么就转化成了一个偶数的联通块,如果选择了桥边,如果分成的两个联通块均为奇数,那么这一条边一定不能被删去,因为又转化成了两个相同的子问题,答案一定更劣,如果分成的两个联通块为偶数,那么就可以考虑删去。在上述情况下选择边权最小的边即可,关于边数统计就是一个子树的 ∑ d e g [ i ] − 1 2 \frac{\sum deg[i]-1}{2} 2deg[i]1 T a r j a n Tarjan Tarjan找桥即可。

I Linear Fractional Transformation

a , b , c , d a,b,c,d a,b,c,d是任意四个互不相同的有限复数,则称 c − a c − b : d − a d − b \frac{c-a}{c-b}:\frac{d-a}{d-b} cbca:dbda为这四个数的交比,记作 ( a , b , c , d ) = c − a c − b : d − a d − b (a,b,c,d)=\frac{c-a}{c-b}:\frac{d-a}{d-b} (a,b,c,d)=cbca:dbda而在分式线性变换中,任意四点交比不变
下面证明这一点:
现有一分式线性变换 f ( z ) = a z + b c z + d f(z)=\frac{az+b}{cz+d} f(z)=cz+daz+b x , y , z , w x,y,z,w x,y,z,w为任意两个互不相同的有限复数,其经过分式线性变换 f f f后为 x ′ , y ′ , z ′ , w ′ x',y',z',w' x,y,z,w z ′ − x ′ = a z + b c z + d − a x + b c x + d = ( a z + b ) ( c x + d ) − ( a x + b ) ( c z + d ) ( c z + d ) ( c x + d ) = ( b d − a c ) ( z − x ) ( c z + d ) ( c x + d ) z'-x'=\frac{az+b}{cz+d}-\frac{ax+b}{cx+d}=\frac{(az+b)(cx+d)-(ax+b)(cz+d)}{(cz+d)(cx+d)}=\frac{(bd-ac)(z-x)}{(cz+d)(cx+d)} zx=cz+daz+bcx+dax+b=(cz+d)(cx+d)(az+b)(cx+d)(ax+b)(cz+d)=(cz+d)(cx+d)(bdac)(zx) z ′ − y ′ = ( b d − a c ) ( z − y ) ( c z + d ) ( c y + d ) z'-y'=\frac{(bd-ac)(z-y)}{(cz+d)(cy+d)} zy=(cz+d)(cy+d)(bdac)(zy)所以 z ′ − x ′ z ′ − y ′ = ( z − x ) ( c y + d ) ( z − y ) ( c x + d ) , \frac{z'-x'}{z'-y'}=\frac{(z-x)(cy+d)}{(z-y)(cx+d)}, zyzx=(zy)(cx+d)(zx)(cy+d), w ′ − x ′ w ′ − y ′ = ( w − x ) ( c y + d ) ( w − y ) ( c x + d ) \frac{w'-x'}{w'-y'}=\frac{(w-x)(cy+d)}{(w-y)(cx+d)} wywx=(wy)(cx+d)(wx)(cy+d)所以 z ′ − x ′ z ′ − y ′ : w ′ − x ′ w ′ − y ′ = z − x z − y : w − x w − y \frac{z'-x'}{z'-y'}:\frac{w'-x'}{w'-y'}=\frac{z-x}{z-y}:\frac{w-x}{w-y} zyzx:wywx=zyzx:wywx,即 ( x , w , z , w ) = ( x ′ , y ′ , z ′ , w ′ ) (x,w,z,w)=(x',y',z',w') (x,w,z,w)=(x,y,z,w)

因此在本题可理解为有 ( z 0 , z 1 , z 2 , z 3 ) (z_{0},z_{1},z_{2},z_{3}) (z0,z1,z2,z3)已知 z 0 , z 1 , z 2 , z 3 , w 1 , w 2 , w 3 , z_{0},z_{1},z_{2},z_{3},w_{1},w_{2},w_{3}, z0,z1,z2,z3,w1,w2,w3, w 0 w_{0} w0

w 2 − w 0 w 2 − w 1 : w 3 − w 0 w 3 − w 2 = z 2 − z 0 z 2 − z 1 : z 3 − z 0 z 3 − z 1 \frac{w_{2}-w_{0}}{w_{2}-w_{1}}:\frac{w_{3}-w_{0}}{w_{3}-w_{2}}=\frac{z_{2}-z_{0}}{z_{2}-z_{1}}:\frac{z_{3}-z_{0}}{z_{3}-z_{1}} w2w1w2w0:w3w2w3w0=z2z1z2z0:z3z1z3z0解出 w 0 w_{0} w0

w 2 − w 0 w 3 − w 0 = w 0 − w 2 w 0 − w 3 = ( z 2 − z 0 ) ∗ ( z 3 − z 1 ) ∗ ( w 2 − w 1 ) ( z 2 − z 1 ) ∗ ( z 3 − z 0 ) ∗ ( w 3 − w 2 ) = r w 0 = w 2 − r w 3 1 − r \frac{w_{2}-w_{0}}{w_{3}-w_{0}}=\frac{w_{0}-w_{2}}{w_{0}-w_{3}}=\frac{(z_{2}-z_{0})*(z_{3}-z_{1})*(w_{2}-w_{1})}{(z_{2}-z_{1})*(z_{3}-z_{0})*(w_{3}-w_{2})}=r\\w_{0}=\frac{w_{2}-rw_{3}}{1-r} w3w0w2w0=w0w3w0w2=(z2z1)(z3z0)(w3w2)(z2z0)(z3z1)(w2w1)=rw0=1rw2rw3

L Perfect Matchings

考虑容斥,恰好选择 0 0 0条树上的边(点对匹配)的方案数等于
a n s = ∑ 0 ≤ i ≤ n 2 ( − 1 ) i s i ans=\sum_{0 \leq i \leq \frac{n}{2}} (-1)^i s_i ans=0i2n(1)isi
其中 s i s_i si表示强制选择 i i i条树上的边,剩下的边随意选择的方案数。
首先考虑在 2 n 2n 2n个点的完全图中随意选择 n n n条边的的方案数,不难推得为
C 2 n n n ! 2 n \frac{C_{2n}^{n}n!}{2^n} 2nC2nnn!
考虑这个式子的组合意义,就是将 2 n 2n 2n个点分成两组,进行随意连边,由于每两个同行的可以交换位置,这样就算重了 2 n 2^n 2n次。
接着我们统计强制选择 i i i条树上的边的方案数,考虑 f [ u ] [ j ] [ 0 / 1 ] f[u][j][0/1] f[u][j][0/1]表示以 u u u为根的子树,我们选择了 j j j条边(点对匹配), u u u有/没有进行匹配的方案数,枚举子树大小进行计算,考虑将两个子树合并。
f [ u ] [ j + k ] [ 0 ] + = f [ u ] [ j ] [ 0 ] ∗ ( f [ v ] [ k ] [ 0 ] + f [ v ] [ k ] [ 1 ] ) f[u][j+k][0]+=f[u][j][0]*(f[v][k][0]+f[v][k][1]) f[u][j+k][0]+=f[u][j][0](f[v][k][0]+f[v][k][1])
f [ u ] [ j + k ] [ 1 ] + = f [ u ] [ j ] [ 1 ] ∗ ( f [ v ] [ k ] [ 0 ] + f [ v ] [ k ] [ 1 ] ) f[u][j+k][1]+=f[u][j][1]*(f[v][k][0]+f[v][k][1]) f[u][j+k][1]+=f[u][j][1](f[v][k][0]+f[v][k][1])
f [ u ] [ j + k + 1 ] [ 1 ] + = f [ u ] [ j ] [ 0 ] ∗ f [ v ] [ k ] [ 0 ] f[u][j+k+1][1]+=f[u][j][0]*f[v][k][0] f[u][j+k+1][1]+=f[u][j][0]f[v][k][0]
前两个式子不难理解,考虑第三个式子就是如果 u u u v v v都没有进行匹配,我们将这两个点进行匹配就会多出一条边。
这样我们的答案就是
a n s = ∑ 0 ≤ i ≤ n 2 ( − 1 ) i ( f [ 1 ] [ i ] [ 0 ] + f [ 1 ] [ i ] [ 1 ] ) ∗ C 2 n − 2 i n − i ( n − i ) ! 2 ( n − i ) ans=\sum_{0 \leq i \leq \frac{n}{2}} (-1)^i (f[1][i][0]+f[1][i][1])*\frac{C_{2n-2i}^{n-i}(n-i)!}{2^(n-i)} ans=0i2n(1)i(f[1][i][0]+f[1][i][1])2(ni)C2n2ini(ni)!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值