https://codeforces.com/group/NVaJtLaLjS/contest/253993/attachments
题意:
n*m个点,每个点有一个高度,q个询问,每次问两点之间最小的路径最大值。
思路:把表格看成一张图,和洛谷P1967是一样的。https://blog.csdn.net/Wen_Yongqi/article/details/101546392
都是无向图+询问多次两点间距离最大(小)的最小(大)值,用mst+lca解决。
#include<bits/stdc++.h>
using namespace std;
int n,m,q,cnt;
int a[505][505];
int x[1000000],y[1000000],z[1000000];
int p[300000],e[1000000];
vector<int> G[300000];
struct Edge{
int from,to,dist;
};
vector<Edge> edges;
int fa[300000][20],maxcost[300000][20],deep[300000],vis[300000];
int findset(int x){
return x==p[x]?x:p[x]=findset(p[x]);}
bool cmp(int a,int b){
return z[a]<z[b];}
void AddEdge(int x,int y,int z)
{
edges.push_back((Edge){
x,y,z});
edges.push_back((Edge){
y,x,z});
G[x].push_back(edges.size()-2);
G[y].push_back(edges.size()-1);
}
void dfs(int u,int f,int d)
{
vis[u]