uoj 181 UR 12 密碼鎖 搜尋

2021-08-18 13:16:26 字數 2414 閱讀 9744

給出一張

n n

個點的完全圖,現在要給這個完全圖的每一條邊隨機定向成乙個有向圖。對於一條邊 (i

,j)(

i' role="presentation" style="position: relative;">(i,

j)(i

(i,j

)(i,這條邊的方向是

i i

到j' role="presentation" style="position: relative;">j

j的概率是nu

mi,j

/10000

n um

i,j/

10000

,numi,j

n um

i,

j指這條邊旁邊的數字,否則就是

j j

到i' role="presentation" style="position: relative;">i

i在隨機定向後,設這張有向圖的強連通分量數目為

x x

,求x∗

10000n(

n−1)

' role="presentation" style="position: relative;">x

∗10000n(

n−1)

x∗10000n(

n−1)

的期望,可以證明該期望值一定是乙個整數。因為答案可能很大,所以只需要求出這個答案對 998244353取模後的結果。 n≤

38,m≤

19 n≤38

,m≤19

當n小的時候不難想到指數和n有關的做法,但當n較大的時候就不能這麼做了。但我們注意到m並不大,所以就考慮指數跟m有關的做法。

先考慮當m=0的時候要怎麼做。

這時每條邊的概率都是一樣的。首先有個性質就是,乙個競賽圖,將其縮點後一定會形成一條鏈,其中鏈的每個點都是乙個強連通分量。

由於我們要統計的是強連通分量的數量,也可以看成是每條鏈的字首的數量,那麼我們只要對每條鏈的每個字首都算一遍這條鏈的貢獻即可。

考慮列舉每條鏈的某個字首的點集s,那麼s的貢獻就是

0.5|s|

∗(n−

|s|)

0.5|s|

∗(n−

|s|)

。只要把所有點集的貢獻加起來就是答案了。

假如現在有一條邊的概率不是0.5,那麼我們可以先用0.5當它的概率,然後再把它的概率乘上2p,其中p是它的實際概率。

那麼現在我們就只用統計那些特殊邊的貢獻。暴力的想,我們可以列舉每乙個點是不是屬於字首,然後對於每一條特殊邊,若其兩個端點的狀態不同,貢獻就要乘上它的概率。

但這樣的複雜度顯然不能接受,那麼我們只要對每乙個連通塊分別搜尋,最後再把每個連通塊的貢獻暴力卷積起來即可。

#include

#include

#include

#include

#include

typedef long long ll;

const int n=45;

const int mod=998244353;

int n,m,tot,s1[n],s2[n],a[n][n],f[n][n],g[n][n],ma[n][n];

struct edgeb[n][n];

bool vis[n],pd[n];

int ksm(int

x,int

y) return ans;

}void dfs1(intx);

if (!vis[i]) dfs1(i);

}}void dfs2(int

x,int

y) (f[tot][s1[tot]-y]+=p)%=mod;

return;

}dfs2(x+1,y);

pd[a[tot][x]]=1;

dfs2(x+1,y+1);

pd[a[tot][x]]=0;

}int main()

for (int i=1;i<=n;i++)

if (!vis[i]) tot++,dfs1(i),dfs2(1,0);

g[0][0]=1;

for (int i=1;i<=tot;i++)

for (int j=0;j<=n;j++)

for (int k=0;k<=j;k++)

(g[i][j]+=(ll)g[i-1][k]*f[i][j-k]%mod)%=mod;

int ans=0;

for (int i=1;i<=n;i++) (ans+=(ll)g[tot][i]*ksm((mod+1)/2,i*(n-i))%mod)%=mod;

printf("%d",(ll)ans*ksm(10000,n*(n-1))%mod);

return

0;}

UOJ 192 UR 14 最強跳蚤

題目鏈結 暑期課第二天 樹上問題高階 具體內容看筆記部落格吧 題意n個節點的樹t 邊有邊權w 求滿足 u,v 上所有邊權乘積為完全平方數的路徑有多少條 看到 所有邊權乘積為完全平方數 想到完全平方數的特殊性 就是分解質因數後 質因數指數都為偶數 然後就想到分解邊權質因數 判質路徑邊權奇偶性 後者由於...

uoj 513 UR 19 清掃銀河

很簽到題 操作2先假設全部為黑,那麼變成了每選乙個點便會取反相連的邊 如果能暴力搞出所有環就可以高斯消元判斷,也許能過40 對原圖建dfs樹,發現只需要保留返祖邊加上對應路徑的環即可,任何的環都可以通過這些環異或得到,於是環的個數變為m級別,高斯消元o m 3 可以70 設返祖邊 u,v,w 的選擇...

UOJ 192 UR 14 最強跳蚤

這道題本來不想寫部落格的 但是鑑於自己犯了低階錯誤,還是寫篇部落格記載一下。一開始我的想法和題解裡面的演算法而比較類似,也是先分解質因數,然後用質因子是否出現偶數次來判斷當前這個數是否是完全平方數 然而這樣並不能ac,於是我去翻了題解 get 了乙個新做法,就是給每個出現過的質因子賦乙個 0,2 的...