題目傳送門
因為要求最長集合線段中的最小值所以果斷使用最大生成樹,因為給定的是張圖,無法確定唯一路徑,而在樹上就是了
再去求相當於兩點分別為端點的鏈上最小值
以前寫過樹上路徑,詳情(t1)
所以這時就成了一道板子題了
注意:這或許不僅僅只有一棵樹,遍歷找沒有訪問過的點重新當根即可。
#include#include#include
#include
#include
using
namespace
std;
inline
intread()
while(c>='
0'&&c<='9')
return ans*f;
}int f[10001
],n,m;
struct
nodex[
50001
];int head[10001
],cnt;
void add(int u,int v,int
w)struct
node1s[
50001
];int
sry;
bool
cmp(node1 x1,node1 x2)
int find(int
x)int fa[10001][21
];int minn[10001][21],deep[10001
];void dfs(int f,int
fath)
for(int i=head[f];i!=-1;i=x[i].nex)
}int
q;int lca(int u,int
v)
if(u==v) return
ans;
for(int i=20;i>=0;i--)
ans=min(ans,minn[u][0]),u=fa[u][0
]; ans=min(ans,minn[v][0]),v=fa[v][0
];
return
ans;
}int
main()
}for(int i=1;i<=n;i++)
q=read();
for(int i=1;i<=q;i++)
}
noip2013貨車運輸
貨車運輸 truck.cpp c pas 問題描述 a 國有n座城市,編號從1到n,城市之間有 m條雙向道路。每一條道路對車輛都有重 量限制,簡稱限重。現在有 q輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的 情況下,最多能運多重的貨物。輸入 輸入檔名為truck.in。輸入檔案第一行有兩個...
NOIP 2013 貨車運輸
題目描述 description a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入描述 input description 第一行有兩個用乙個...
NOIP 2013 貨車運輸
題目大意 給定一張無向圖 以及若干個詢問 對於每個詢問求所有由節點u到節點v的路徑上邊權的最小值的最大值。題解 首先用構造一棵最大生成樹,這樣保證樹上兩個節點路徑邊權的最小值最大 在最大生成樹上兩個節點之間只有一條路徑,所以只需要找路徑上邊權的最小值 為了快速的尋找最小值,利用樹上倍增的想法用f j...