求最多最短路徑路徑的最大權值中的最小值,明顯 我們可以建立一顆最大的生成樹, 然後在這顆生成樹裡面求lcaac**lcalc
a中的最小值就好了
樹上倍增的方法求lca
lcalc
a 當然也可以直接樹剖求
#include
using namespace std;
#define cpp_io()
#define rep(i,a,n) for (int i=a;i#define repp(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define clr(a,b) memset(a,(b),sizeof(a))
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ls o<<1
#define rs o<<1|1
typedef
long
long ll;
typedef vector<
int> vi;
const
int maxn =
(int
)2e5+10
;const
int inf =
0x3f3f3f3f
;const
int mod =
(int
)1e9+7
;voidf(
)struct node p[maxn]
;struct edge };
vector e[maxn]
;int par[maxn]
;bool in[maxn]
;int f[maxn][30
],w[maxn][30
],dep[maxn]
;int n,m;
void
init()
bool cmp
(node a,node b)
intfind
(int x)
void
unite
(int x,
int y)
void
kruskal()
if(k==n-1)
break;}
}void
dfs(
int u,
int fa,
int d)
}void
ycl(
)repp
(i,1,20
)}}int
lca(
int u,
int v)}if
(u==v)
return ans;
per(i,0,
21)} ans=
min(ans,
min(w[u][0
],w[v][0
]));
return ans;
}int
main
(int argc,
char
const
*argv)
return0;
}
洛谷 P1967 貨車運輸
a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入檔名為 truck.in。輸入檔案第一行有兩個用乙個空格隔開的整數 n,m,表示 a 國有 ...
洛谷 P1967 貨車運輸
題目描述 a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入輸出格式 輸入格式 輸入檔名為 truck.in。輸入檔案第一行有兩個用乙個空格隔...
貨車運輸 洛谷p1967
解法一 30分 直接跑spfa,求最大瓶頸路。include include include define f i,l,r for i l i r i using namespace std const int maxn 10005,maxm 50005,inf 100000000 struct e...