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 ...
随机推荐
- 15.ASP.NET Core 应用程序中的静态文件中间件
在这篇文章中,我将向大家介绍,如何使用中间件组件来处理静态文件.这篇文章中,我们讨论下面几个问题: 在ASP.NET Core中,我们需要把静态文件存放在哪里? 在ASP.NET Core中 wwwr ...
- unity使用Animator做一个简单的动画
1.在unity的物体上添加Animator组件 2.在Project下的Assets下添加Animator Controller 3.在Animator Controller添加动作 4.在动作之间 ...
- stand up meeting 12-10
今天项目会议正好利用了大家上课前的十五分钟,大家对项目进度和项目中所遇到的问题进行了沟通. 由于天赋同学与重阳小组沟通及时有效,在mapping的过程中直接将单词本中的type与我们单词挑战中的que ...
- Python程序设计 实验 1 熟悉 IDLE 和在线编程平台
------------恢复内容开始------------ 安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名 姚彩琴 学号3190505129 成绩 日期 2 ...
- Python——详解__slots__,property和私有方法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第11篇文章,我们来聊聊面向对象的一些进阶使用. __slots__ 如果你看过github当中一些大牛的代码,你会 ...
- Python - 利用词云wordcloud,jieba和中国地图制作四大名著的热词图
热词图很酷炫,也非常适合热点事件,抓住重点,以图文结合的方式表现出来,很有冲击力.下面这段代码是制作热词图的,用到了以下技术: jieba,把文本分词 wordcloud,制作热图 chardet,辨 ...
- 【08NOIP提高组】笨小猴
笨 小 猴 来自08年NOIP提高组的第一题 1.题目描述 [题目描述] 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头痛.经实验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体 ...
- TensorFlow keras卷积神经网络 添加L2正则化
model = keras.models.Sequential([ #卷积层1 keras.layers.Conv2D(32,kernel_size=5,strides=1,padding=" ...
- 技术周刊 · 0202 年了,你还不学一下 WASM 么?
蒲公英 · JELLY技术周刊 Vol.04 「蒲公英」期刊全新升级--JELLY技术周刊!深度挖掘业界热点动态,来自团队大咖的专业点评,带你深入了解团队研究的技术方向. 登高远眺 天高地迥,觉宇宙之 ...
- Test Test...
标题: Test(一级标题) Test(二级标题) Test(三级标题) 列表: test(列表) Alpha Beta Gamma test 2 Delte Epsilon 链接: 点兔成金斐波那契 ...