轉化一下題意,若
i 向ai
連一條邊,那麼最後就會變成若干個環(因為每個點的入度出度都為1),那麼選中環中的乙個點就相當於選中了整個環,問選
k 次選中所有環的概率。求概率有多種方式,本題採用合法方案數/總方案數,那麼f[
i][j
]表示前
i 個環用了
j次選完的方案數,轉移的話列舉第
i 個環被選中了多少次即可,由於方案數巨大,組合數和
f都要用double型別。
#include
using
namespace
std;
#define ll long long
#define pa pair
const
int maxn=310;
const
int inf=2147483647;
int read()
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}int n,k,a[maxn];
bool mark[maxn];
int b[maxn],c=0;
double c[maxn][maxn],f[maxn][maxn];//f[i][j]前i個環用j次解決的方案數
void dfs(int x)
int main()
int t=read();
while(t--)
}printf("%.9lf\n",f[c][k]/c[n][k]);
}}
bzoj 5004 開鎖魔法II
給你n個點,每個點有且只有一條有向邊邊 你可以在上面選擇k個點,問你選到這k個點,沿著邊走,可以走完整個圖的概率是多少 很明顯,這個圖,最後會成為很多個不同的聯通塊 然後對於每乙個聯通塊,我們縮點之後,就會出現乙個樹,明顯地,樹的根是一定要選的 當然,樹的根有可能是乙個環 然而環裡面,你任意選擇乙個...
BZOJ 5004 開鎖魔法II 概率dp
盒子之間的開啟關係 用圖的方式呈現 就是一片環 最終所有成功開啟 則每一顆環都成功開啟 所以求出每個環放k個點成功的概率 之後依次列舉每一顆環 及其內部選擇點數與在之前的環中選擇點數 再乘上對應概率 include include include include include include in...
bzoj5004 開鎖魔法II dp
一日,崔克茜來到小馬鎮表演魔法。其中乙個節目是開鎖咒 舞台上有n 個盒子,每個盒子中有一把鑰匙,對於每個盒子而言有且僅有一把鑰匙能開啟它。初始時,崔克茜將會隨機地選擇k個盒子用魔法將它們開啟。崔克茜想知道最後 所有盒子都被開啟的概率,你能幫助她回答這個問題嗎?考慮鑰匙向盒子連邊,形成的圖一定為多個不...