參考部落格:
#include#includeview code#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 205
;const
int maxe = 20500
;const
int inf = 0x3f3f3f
;struct
edge
bool
operator
< (const edge& e) const
}edges[maxe];
inthead[maxn];
vector
g[maxn];
intcnt;
intn,m,p;
double pt[maxn][maxn/2
];double dp[maxn][maxn/2]; //
dp[i][j]表示以i為根、部署j個警察逮到robber的最大概率;
void addedge(int u,int v,int
w)void
dijkstra());
d[0] = 0
;
while(!q.empty())
for(int i=head[u];i!=-1;i=edges[i].next));
//把u存進去是為了方便建最短路圖;
} }
}}void dfs(int
u)
return
; }
for(int i=0;i)
for(int i=p;i>=0;i--) //
總共i個人
for(int j=0;j<=i;j++)
}int
main()
scanf("%d
",&p);
for(int i=0;i0] = 0
;
for(int i=0;i)
for(int j=1;j<=p;j++)
dijkstra();
//形成以0為根的最短路樹;存在g[u]中;
dfs(0);
double ans = 0
;
for(int i=0;i<=p;i++)
ans = max(ans,dp[0
][i]);
printf(
"%.2lf\n
",ans*100
); }
}
HDU 2433 Travel 最短路樹
題意 給乙個n個點m條邊的無向圖 分別刪除每條邊 問刪除後的新圖中 分別以每個點為原點 到其它點的最短距離之和 圖不連通時輸出inf 思路 如果對於每一條邊刪除後都做n次最短路 則時間複雜度為o m n m log n 時間複雜度太高 仔細分析一下不難發現 只有刪除的邊是最短路樹上的邊 各點之間的最...
HDU 4568 Hunter 最短路 狀壓DP
題意 給乙個n m的格仔,格仔中有一些數,如果是正整數則為到此格仔的花費,如果為 1表示此格仔不可到,現在給k個寶藏的地點 k 13 求乙個人從邊界外一點進入整個棋盤,然後拿走所有能拿走的寶藏的最小花費,如果一次不能拿走所有能拿到的或者根本拿不到任何寶藏,輸出0.解法 看到k的範圍應該想到狀態壓縮,...
hdu 4607 樹形dp 樹的直徑
題目大意 給你n個點,n 1條邊,將圖連成一棵生成樹,問你從任意點為起點,走k k n 個點,至少需要走多少距離 每條邊的距離是1 思路 樹形dp求樹的直徑r a 若k r 1 ans k 1 b 若k r 1,ans r k r 1 2 include include includeusing n...