2007LA 3902 網路 樹 貪心

2021-06-19 12:53:41 字數 704 閱讀 2880

題意:在乙個樹狀的網路中,提供vod服務,葉子節點是客戶端,其他是伺服器,要減少網路延遲,所以要在其他的伺服器也安裝同樣的服務,使得每台客戶端到最近伺服器的距離不超過k,求最少安裝服務的伺服器。

思路:乙個關鍵點是選擇u節點的k級祖先是最優的,因為覆蓋的範圍最廣,所以我們構造出一顆有根樹,從下往上遍歷葉子節點,看是否被覆蓋,沒有則在k級祖先安裝服務。

#include #include using namespace std;

#define maxn 1010

vectorlink[maxn];//存樹

vectornode[maxn];//存第i層節點

int n, s, k, father[maxn];

bool used[maxn];

void dfs(int u, int fa, int d)//無根樹轉有根樹,計算father陣列,根據深度插入node表

}void dfs2(int u, int fa, int d)

}int solve()

} }return ans;

}int main()

for (i = 0; i < n - 1; i++)

dfs(s, -1, 0);//節點,父節點,深度

printf("%d\n", solve());

} return 0;

}

LA 4597 網路流 有上下界

include include include include define pb push back define mp make pair define f1 first define f2 second using namespace std const int maxn 110,inf 0x...

LA2957 網路流 藍書例題

分析 首先假設答案為t。構圖如下 把原圖的每個點u拆成t 1個,分別為u0,u1,其中u0是初始狀態的結點u,ui表示經過i天之後的結點u。對於原圖中的相鄰結點a和b,在新圖中新增一條從ai到bi 1的邊,容量為1,再新增一條bi到ai 1的邊,容量也為1。對於原圖中的每個結點u,新增 ui ui ...

NOIP2007 樹網的核 模擬 貪心

有個引理是從任何一條直徑上求得的最小偏心距都相同 貪心的話,核肯定是越大越好的 然後我們在一條直徑上列舉長度不超過s的一段路徑,作為核,求一下偏心距,最後求出最小值即可 注意,是路徑長度,長度!不是點的數量!include include include include include using ...