題目大意:
無向圖上
每次詢問兩個點
尋找一條路徑使這條路徑上的最小值最大
思路:先跑乙個最大生成樹
然後在最大生成樹上每次對每兩個點跑乙個lca
在倍增的同時開乙個陣列a[i][j] 記錄從i個點往上跑j條路裡j條路中的最小值
然後每次lca的時候順便記錄一下就行了
1 #include2 #include3 #include4 #include5 #include6 #include7 #includeview code8 #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 }
倍增陣列開小了調了好久
兩個倍增寫串了調了好久
我太菜了
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。輸入檔案第一行有兩個用乙個空格隔...