GCPC2018 Problem M: Mountaineers

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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值