刪邊求概率

2022-06-09 02:27:09 字數 2158 閱讀 2729

wnjxyk和dididi正在玩遊戲。 dididi在紙上繪製乙個有向圖g,該圖包含n個點,m個有向邊且無迴圈。 wnjxyk從點1開始。每回合,wnjxyk將隨機選擇從當前點開始的有向邊之一,其可能性均等,然後從該邊轉到下乙個點。遊戲將繼續,直到沒有這種優勢為止。 dididi將把寶藏放在點n上,如果wnjxyk經過這一點,他就可以得到寶藏。 wnjxyk有機會刪除一條邊(他也不能選擇刪除),這樣他可以增加獲得寶藏的可能性。您的任務是計算wnjxyk在最佳條件下獲得寶藏的可能性。

輸入輸入的第一行包含乙個正整數t,告訴您緊隨其後的t個測試用例。

對於每個測試用例,第一行包含兩個整數n,m,分別指示點數,邊數。

然後,以下是m行,每行包含兩個整數x和y,表示存在從x到y的邊。

保證不存在多個邊緣。

輸出對於每個測試用例,列印一行「 case #x:y」,其中x是案例編號(從1開始),y是他得到寶藏的概率。 (四捨五入到小數點後六位)。

樣例輸入

2

4 41 2

1 31 4

2 34 5

1 21 3

1 42 3

2 4

樣例輸出 copy

case #1: 0.500000

case #2: 0.750000

提示tips:1≤t≤100,3≤n≤50,1≤m≤n(n-1)/2

case 1: delete 1 - 2, 50% 1->3, 50% 1->4.

case 2: delete 1 - 3, 25% 1->2->4, 25% 1->2->3, 50% 1->4.

反向建圖,列舉刪除每一條邊。

圖中不存在環,因此到達每乙個點的值都是由其父節點等概率分配來的,於是我們可以統計每個點有多少個孩子,然後進行記憶化搜尋。

#pragma gcc optimize(1)

#pragma gcc optimize(2)

#pragma gcc optimize(3,"ofast","inline")#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;template

void read(tp &x)

if(ch=='-'

)else fh=1

;

while(ch>='

0'&&ch<='9'

) x*=fh;

}inline

char read1()//

字串讀入掛

const

int maxn=200

;const

int mod=1000000007

;const

int inf=0x3f3f3f

;struct

nodeedge[maxn*maxn];

intn,m;

intdx,dy,tot;

double

v[maxn],ans;

int head[maxn],out

[maxn];

intvis[maxn][maxn];

void add(int u,int

v)double dfs(int

x)

else

for(int i=head[x];~i;i=edge[i].next)

ans1+=dfs(to)/out

[to];}}

v[x]=ans1;

return

ans1;

}void

inint()

intmain()

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

memset(v,

0.0,sizeof

(v));

dx=dy=-1;//

不刪邊

ans=max(ans,dfs(n));

printf(

"case #%d: %.6lf\n

",case,ans);

}return0;

}

瑪麗卡(spfa刪邊求最短路)

題目描述 麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修,並且那兒正堵車,但沒聽清楚到底是哪一條路。無...

最短路徑樹 刪邊

題意 n nn 個點,m mm條邊的無向圖,令dis disdi s為每對結點的最短路長度的和。例如n 2 n 2n 2時,dis d 1 1 d 1,2 d 2,1 d 2,2 dis d 1,1 d 1,2 d 2,1 d 2,2 dis d 1,1 d 1 2 d 2,1 d 2,2 現在要求...

GDOI2003 刪邊 騎士問題

刪邊刪邊 刪邊description 連通圖是指任意兩個頂點都有路徑可互相到達的圖。讀入乙個無向的連通圖,輸出最多能刪掉多少條邊,使這個圖仍然連通。input 第一行為圖的頂點數n 1 n 100 和邊數m,用乙個空格隔開,圖中的頂點用1到n的整數 編號。接下來的m行,每行用兩個數v1,v2表示一條...