lh的简单图论
lh的简单图论
http://10.64.70.166/problem/1112
Description
众所周知,集训队的lh同学txdy,有一天他在写着代码,突然哼起了raprap,哟,哟哟,你看这个碗它又大又圆,就像这个题它又短又难,skrskr,skrskr。
lhlh在着手解决一个图论的问题:
已知有一个nn个点的无向图,图中有mm条边,每条边的权值为w_iwi。
lhlh想知道,他从点aa走到点bb,所走的最长的边长最小值是多少?
Input
第一行输入三个正整数n,m,qn,m,q,分别表示有nn个点mm条边和qq次询问。
接下来mm行,每行有三个数分别为u_iui、v_ivi、w_iwi表示从点uu到点vv有一条路径边长为ww。
接下来qq行,每行有两个数aa,bb,表示lhlh想知道他从aa走到bb所走的最长的边长的最小值。
Output
输出qq行,每行一个正整数,表示他从点aa走到点bb,所走的最长的边长最小值是多少。
Sample Input 1
6 6 8
1 2 5
2 3 4
3 4 3
1 4 8
2 5 7
4 6 2
1 2
1 3
1 4
2 3
2 4
5 1
6 2
6 1
Sample Output 1
5
5
5
4
4
7
4
5
Hint
1≤n≤15000
1≤M≤30000
1≤wi≤1000000000
1≤q≤20000
这个题目就是比较典型的图转树,这个好像就是UVA的11354
你要用最小生成树把图转变成树,然后再用LCA处理这棵树
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 3e4 + ;
int dp[maxn][];
ll gw[maxn][];
int deep[maxn];
int n, m, q, N;
struct node
{
int from,to;
ll dist;
node(int from=,int to=,ll dist=):from(from),to(to),dist(dist){}
}exa[maxn];
vector<node>vec[maxn];
int f[maxn];
int findx(int x)
{
return f[x] == x ? x : f[x] = findx(f[x]);
} void unite(int x,int y)
{
x = findx(x);
y = findx(y);
if (x == y) return;
f[x] = y;
} bool same(int x,int y)
{
return findx(x) == findx(y);
}
bool cmp(node a,node b)
{
return a.dist < b.dist;
} void dfs(int s)
{
for(int i=;i<=N;i++)
{
dp[s][i] = dp[dp[s][i - ]][i - ];
gw[s][i] = max(gw[s][i - ], gw[dp[s][i - ]][i - ]);
}
int len = vec[s].size();
for(int i=;i<len;i++)
{
node e = vec[s][i];
if(e.to!=dp[s][])
{
deep[e.to] = deep[s] + ;
dp[e.to][] = s;
gw[e.to][] = e.dist;
dfs(e.to);
}
}
} ll LCA(int x,int y)
{
if (x == y) return ;
if (deep[x] > deep[y]) swap(x, y);
ll ans = ;
for(int i=N;i>=;i--)//抬到同一高度
{
if(deep[x]<deep[y]&&deep[dp[y][i]]>=deep[x])
{
ans = max(ans, gw[y][i]);
y = dp[y][i];
}
}
for(int i=N;i>=;i--)//一起往上走
{
if(dp[x][i]!=dp[y][i])
{
ans = max(ans, gw[x][i]);
ans = max(ans, gw[y][i]);
x = dp[x][i];
y = dp[y][i];
}
}
if(x!=y)//最后一步
{
ans = max(ans, gw[x][]);
ans = max(ans, gw[y][]);
}
return ans;
} int main()
{
cin >> n >> m >> q;
for(int i=;i<=m;i++)
{
int a, b;
ll w;
cin >> a >> b >> w;
exa[i] = node(a, b, w);
}
for (int i = ; i <= n; i++) f[i] = i;
sort(exa + , exa + + m, cmp);
for(int i=;i<=m;i++)
{
int x = exa[i].from, y = exa[i].to;
if (same(x, y)) continue;
unite(x,y);
vec[x].push_back(node(x, y, exa[i].dist));
vec[y].push_back(node(y, x, exa[i].dist));
}
N = (log(n + 0.0)) / log(2.0);
deep[] = ;
dfs();
for(int i=;i<=q;i++)
{
int x, y;
cin >> x >> y;
ll ans = LCA(x, y);
cout << ans << endl;
}
return ;
}
lh的简单图论的更多相关文章
- 2249: Altruistic Amphibians 01背包的应用 + lh的简单图论 图转树求lca
第一个 写了两个比较简单的数论题目,就是整除理论的两个题目,第一个题目比较蠢,第二个稍微要动一点脑筋 Codeforces Round #347 (Div. 2) – A. Complicated G ...
- cdoj1580 简单图论问题
地址:http://acm.uestc.edu.cn/#/problem/show/1580 题目: 简单图论问题 Time Limit: 3000/1000MS (Java/Others) ...
- ZROI 19.07.30 简单图论/kk
1.最短路 NOI2019 D2T1 我被这题送Fe了/lb 只有zz才会写二维线段树,比如我. 实际上你只需要矩形取min就可以. kd-tree可以随便过,最慢的点\(0.1s\). 另外一种简单 ...
- [CSP-S模拟测试]:Tourist Attractions(简单图论+bitset)
题目描述 在美丽的比特镇一共有$n$个景区,编号依次为$1$到$n$,它们之间通过若干条双向道路连接.$Byteasar$慕名来到了比特镇旅游,不过由于昂贵的门票费,他只能负担起$4$个景区的门票费. ...
- CCCC L2-023. 图着色问题【set去重判不同种类个数/简单图论/判断两相邻点是否存在同色以及颜色个数】
L2-023. 图着色问题 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 图着色问题是一个著名的NP完全问题.给定无向图 G ...
- Google Codejam 2016 Round1A Problem C BFFs 简单图论
链接 Google Codejam 2016 Round1A Problem C BFFs 题意 n个小朋友要坐成一个圈.每个小朋友心中都有一个Best Friend Forever.要保证每个人的左 ...
- acm之图论基础
1.图的定义 图 是一个顶点集合V和一个顶点间关系的集合E组成,记G=(V,E) V:顶点的有限非空集合. E:顶点间关系的有限集合(边集). 存在一个结点v,可能含有多个前驱节点和后继结点. 1顶点 ...
- ACRush 楼天成回忆录
楼教主回忆录: 利用假期空闲之时,将这几年 GCJ , ACM , TopCoder 参加的一些重要比赛作个回顾.首先是 GCJ2006 的回忆. Google Code Jam 2006 一波三折: ...
- BZOJ1718 [Usaco2006 Jan] Redundant Paths 分离的路径
给你一个无向图,问至少加几条边可以使整个图变成一个双联通分量 简单图论练习= = 先缩点,ans = (度数为1的点的个数) / 2 这不是很好想的么QAQ 然后注意位运算的优先级啊魂淡!!!你个sb ...
随机推荐
- 数据结构和算法(Golang实现)(28)查找算法-AVL树
AVL树 二叉查找树的树高度影响了查找的效率,需要尽量减小树的高度,AVL树正是这样的树. 一.AVL树介绍 AVL树是一棵严格自平衡的二叉查找树,1962年,发明者Adelson-Velsky和La ...
- 360众测考试 Drupal 漏洞 CVE-2018-7600 远程代码执行-复现
0x00 前言 昨天360众测遇到的一个题 今天自己搭环境复现一下,希望对大家有帮助 0x01 漏洞简介 Drupal是一个开源内容管理系统(CMS),全球超过100万个网站(包括政府,电子零售,企业 ...
- Docker-CentOS系统安装Docker
上一节,我们介绍了安装虚拟机及操作系统,本文再详细描述安装docker的命令. 前提条件 虚拟机系统:CentOS,并且虚拟机能连通外网. 另外,虚拟机最好配置上阿里的镜像源,点此链接,进入cento ...
- jQuery+ajax实现滚动到页面底部自动加载图文列表效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 利用SSIS进行SharePoint 列表数据的ETL
好几年前写了一篇<SSIS利用Microsoft Connector for Oracle by Attunity组件进行ETL!>,IT技术真是日新月异,这种方式对于新的SQL SERV ...
- 小程序—银行、券商们下一代APP的进阶方向
传统金融机构们的App——尤其以手机银行.手机证券为最,发展到今天,已经产生一系列的问题:从用户角度看,体验普遍不好.高度同质化:从业务运营角度看,几乎没有什么“运营”的抓手:从IT角度看,投入产出比 ...
- F - What Is Your Grade?
“Point, point, life of student!” This is a ballad(歌谣)well known in colleges, and you must care about ...
- 3. pkg
程序打包成可执行文件(.exe) 1.) npm install -g pkg 2.) 单个文件:pkg entrance.js ( windows: pkg -t win entrance.js ...
- [php] 简单的实现一个错误接管类
自己弄的一个错误接管类: <?php //---------------------------------- // Leephp 错误接管类 // 2017-07-06 // Pengchon ...
- wordpress 常用操作
删除主题 在主题目录 wp-content/themes 中直接删除即可. 首页和文章页使用不同主题 首页使用sidebar,文章页不使用sidebar,这样文章的内容可以占更宽的页面 安装插件 Mu ...