Tarjan縮點 bitset 大包子玩遊戲

2021-08-28 17:47:40 字數 1295 閱讀 7305

題意是給你乙個圖。

每次你在剩下的點中隨機選擇乙個點

這個點及其後繼的點會被刪除(包括邊)

問你期望操作次數

如果對於乙個點i有ai個點可以到達它

那麼我們期望的操作次數為

∑ i=

1n1a

i\sum_^\frac}

∑i=1n​

ai​1

​可以用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...