luogu 1967 貨車運輸

2022-06-01 15:30:12 字數 1557 閱讀 8043

題目大意:

無向圖上

每次詢問兩個點

尋找一條路徑使這條路徑上的最小值最大

思路:先跑乙個最大生成樹

然後在最大生成樹上每次對每兩個點跑乙個lca

在倍增的同時開乙個陣列a[i][j] 記錄從i個點往上跑j條路裡j條路中的最小值

然後每次lca的時候順便記錄一下就行了

1 #include2 #include3 #include4 #include5 #include6 #include7 #include

8 #include9 #include10 #include11 #include12

#define ll long long

13#define inf 2147383611

14#define maxn 10101

15using

namespace

std;

16 inline int

read()

1721

while(isdigit(ch))

22return x*f;23}

24struct

data

2531 }edge[maxn*7

];32

int cnt,n,m,t,to[maxn*7],first[maxn],nex[maxn*7],val[maxn*7

];33

intdepth[maxn];

34int

father[maxn];

35int f[maxn][20],ans[maxn][20

];36

int find(int x)

37bool ok(int a,int

b)3842}

43void add(int u,int v,int a)

44void

kruskal()

4550

if(tot==n-1) return;51

}52}53

void dfs(int x,int

fa)54

61for(int i=first[x];i;i=nex[i]) if(to[i]!=fa) 62}

63int lca(int u,int

v)64

73if(u==v) return

v;74

return f[u][0

];75}76

int dis(int u,int

v)7784}

85return

res;86}

87int

main()

8897 sort(edge+1,edge+m+1

);98

kruskal();

99int

l;100 depth[1]=1;dfs(1,0

);101 t=read();

102while(t--)

103109 }

view code

倍增陣列開小了調了好久

兩個倍增寫串了調了好久

我太菜了

luogu1967 貨車運輸

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

luogu1967 貨車運輸

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

luogu1967 貨車運輸

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