洛谷P1967 貨車運輸 (最大生成樹 LCA

2021-08-28 11:36:19 字數 1809 閱讀 1186

求最多最短路徑路徑的最大權值中的最小值,明顯 我們可以建立一顆最大的生成樹, 然後在這顆生成樹裡面求lca

lcalc

a中的最小值就好了

樹上倍增的方法求lca

lcalc

a 當然也可以直接樹剖求

ac**

#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...