。。。
和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 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下...