poj_1935,樹的最優遍歷,結合動規與dfs,參考部落格
#include
#include
#include
#define n 50005
using
namespace std;
//某城市的道路,ed為連線的城市,val為道路長度,存放在gra中
struct e};
vectorgra[n]
;//每個城市都有乙個vector用於存放他的道路資訊
//每個城市的:父節點、是否要被經過、從該城市出發經過其所有需要旅行的子節點城市所需走的距離
//其中,dp[k][0]是來回距離(即需要返回該城市),dp[k][1]是單程距離(不需要返回該城市)
int fa[n]
,flag[n]
,dp[n][2
];int n,root;
void
dfs(
int s,
int f)
}void
dpt(
int s)
for(
int i=
0;i.size()
;i++)}
void
run()}
dpt(root)
;printf
("%d\n"
,dp[root][1
]);}
intmain()
run();
}return0;
}
poj 1935 搜尋 回溯
解題思路 先我們考慮從源點出發到所有自己想要經過的點然後在回到源點sum,顯然每條邊都必須經過源點 這個我們可以一次dfs求出 但題目的意思是可以不用回到源點,那麼我們可以再求源點到所有要經過的點的最遠距離ans,於是答案便是sum ans.這道題的思路確實是很巧妙,一開始我還是在想如何表示從某一點...
POJ 2728 最優比例生成樹
有帶權圖g,對於圖中每條邊e i 都有benifit i 收入 和cost i 花費 我們要求的是一棵生成樹t,它使得 benifit i cost i i t 最大 或最小 設x i 等於1或0,表示邊e i 是否屬於生成樹.則我們所求的比率 r benifit i x i cost i x i ...
poj2728 最優比率生成樹
這個題的意思是給你乙個連通圖,圖上每個點都有連個權值ai,bi讓你選乙個生成樹使得sigma ai xi sigma bi xi 最小,對比與基礎的01規劃,我們假設答案是mid,然後建立乙個圖,其新的邊的權值是ai mid bi,然後求解最小生成樹,假設其答案是tp,如果tp 0,說明還有更優的解...