Kruskal重構樹(貨車運輸)

2021-08-13 06:08:52 字數 1288 閱讀 3800

。。。

和kruskal生成樹一樣

本來是u,v連一條f的邊

現在變成新建乙個點,點權為f,u v都像它連無邊權的邊

(實際上應該是u的根和v的根)

這樣樹有一些性質:

1.二叉樹

2.原樹與新樹兩點間路徑上邊權(點權)的最大(最小)值相等

3.子節點的邊權(大於等於)小於等於父親節點

4.原樹中兩點之間路徑上邊權的最大(最小)值等於新樹上兩點的lca的點權

# include 

# include

# include

# include

# include

# define il inline

# define ll long long

# define fill(a, b) memset(a, b, sizeof(a));

using

namespace

std;

il ll read()

const

int maxn = 20001, maxm = 200001;

int ft[maxn], n, m, cnt, fa[maxn][20], w[maxn], deep[maxn], fa[maxn], num;

struct edge edge[maxm];

struct kruskal

} road[maxm];

il int find(int x)

il void add(int u, int v); ft[u] = cnt++;

edge[cnt] = (edge); ft[v] = cnt++;

}il void dfs(int u)

}}il int lca(int u, int v)

int main();

sort(road + 1, road + m + 1);

for(int i = 1, tot = 0; i <= m && tot < n; i++)

}for(int i = num; i; i--)

if(!deep[i]) deep[i] = 1, dfs(i);

for(int i = 1; i <= 18; i++)

for(int j = 1; j <= num; j++)

fa[j][i] = fa[fa[j][i - 1]][i - 1];

int q = read();

while(q--)

return

0;}

P1967 貨車運輸 Kruskal重構樹

題目描述 a國有n座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入輸出格式 輸入格式 第一行有兩個用乙個空格隔開的整數n,m,表示 a 國有 n 座城市和...

3287 貨車運輸

題目描述 description a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入描述 input description 第一行有兩個用乙...

3287 貨車運輸

2013年noip全國聯賽提高組 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下...