題意是給你乙個圖。
每次你在剩下的點中隨機選擇乙個點
這個點及其後繼的點會被刪除(包括邊)
問你期望操作次數
如果對於乙個點i有ai個點可以到達它
那麼我們期望的操作次數為
∑ i=
1n1a
i\sum_^\frac}
∑i=1n
ai1
可以用tarjan縮點後用bitset壓位解決
時間複雜度:
o (1
32n3)
o(\fracn^3)
o(321
n3)
#include#include#include#include#include#includeusing namespace std;
int n;
#define maxn 1005
#define e 1000010
int head[maxn],v[e],nxt[e],tot=0;
int dfn[maxn],low[maxn],dfk=0;
int bel[maxn],cnt=0;
int stk[maxn],top=0;
vectorgraph[maxn];
int in[maxn];
bool instack[maxn];
int siz[maxn];
bitsetb[maxn];
int q[maxn],hd,tl;
inline void add_edge(int s,int e)
void tarjan(int u)while(x!=u); }}
int main()
}for(register int i=1;i<=n;++i)
if(!dfn[i])tarjan(i);
for(register int i=1;i<=n;++i)
for(int j=head[i];j;j=nxt[j])
if(bel[i]!=bel[v[j]])
hd=tl=0;
for(register int i=1;i<=cnt;++i)
if(!in[i])q[tl++]=i;
while(hd}
double ans=0;
for(register int i=1;i<=cnt;++i)ans+=1.0*siz[i]/b[i].count();
printf("case #%d: %.5lf\n",tt,ans);
}return 0;
}
Tarjan縮點 SPFA 縮點
洛谷p3387縮點 tarjan spfa求dag上單源最短路模板題 用tarjan在原圖上求scc 縮點 用縮點之後的scc建乙個有向無環圖 scc權為此scc內所有點點權和 在新建的dag上將scc權視為邊權跑spfa 求scc 1 到scc n 的最長路即為所求答案 include inclu...
Tarjan演算法 縮點
我們這一篇是在已經了解tarjan演算法的基礎之上開始寫的,如果不了解的話,請先看大牛們 關於tarjan演算法的部落格。首先我們對於乙個有向無環的圖 dag 至少新增幾條邊才能使它變為強連通圖?我們很容易根據有向無環圖的性質得到,我們計算入度為零的點數為a,出度為零的點數為b,那麼我們至少需要新增...
Tarjan 縮點 模板
縮點以後,整張圖變為dag 有向無環圖 此時運用拓撲排序 求出度入度就可以完成許多事 題目 include include include include include include define ll long long using namespace std const int maxn 1...