2016.1.28 纪念我BZOJ第一题

Description

给你N个点的无向图 (1 <= N <= 15,000),记为:1…N。
图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 < = d_j < = 1,000,000,000).

现在有 K个询问 (1 < = K < = 15,000)。
每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少?

Input

第一行: N, M, K。
第2..M+1行: 三个正整数:X, Y, and D (1 <= X <=N; 1 <= Y <= N). 表示X与Y之间有一条长度为D的边。
第M+2..M+K+1行: 每行两个整数A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少?

Output

对每个询问,输出最长的边最小值是多少。

Sample Input

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

5
5
5
4
4
7
4
5

HINT

1 <= N <= 15,000

1 <= M <= 30,000

1 <= d_j <= 1,000,000,000

1 <= K <= 15,000

 
 
很简单的啦~先构造个最小生成树呗,然后a到b的路径上的最长边就是答案咯~想想就明白的啦~
LCA嘛~
 
AC代码:
/**************************************************************
Problem: 3732
User: cscscs
Language: C++
Result: Accepted
Time:224 ms
Memory:5036 kb
****************************************************************/ #include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxlog=;
inline int read();
struct data
{
int a,b,c;
bool operator<(data d)const {return c<=d.c;}
}Edge[];
int n,m,k,father[];
int last[],to[],w[],final[],e,vis[];
int f[][maxlog],dist[][maxlog],dep[];
int FindFather(int x)
{
if(x==father[x]) return x;
return father[x]=FindFather(father[x]);
}
void AddEdge(int a,int b,int c)
{
w[++e]=c;to[e]=b;last[e]=final[a];final[a]=e;
w[++e]=c;to[e]=a;last[e]=final[b];final[b]=e;
}
void LCA(int x)
{
vis[x]=;
for(int i=;(<<i)<=dep[x];i++)
{
int c=f[x][i-];
f[x][i]=f[c][i-];
dist[x][i]=max(dist[c][i-],dist[x][i-]);
}
for(int i=final[x];i;i=last[i])
{
if(!vis[to[i]])
{
dep[to[i]]=dep[x]+;
f[to[i]][]=x;
dist[to[i]][]=w[i];
LCA(to[i]);
}
}
}
int query(int a,int b)
{
int ret=;
if(dep[a]<dep[b]) swap(a,b);
for(int i = maxlog ; i >= ; i-- ) if(dep[a]-(<<i)>=dep[b])
{
ret=max(ret,dist[a][i]);
a=f[a][i];
}
if(a==b) return ret;
for(int i = maxlog ; i >= ; i-- ) if(dep[a] > (<<i) && f[a][i] != f[b][i])
{
ret=max(ret, max(dist[a][i], dist[b][i]) );
a=f[a][i];b=f[b][i];
}
return max(ret, max(dist[a][], dist[b][]) );
}
int main()
{
n=read();m=read();k=read();
for(int i=;i<=m;i++)
{
Edge[i]={read(),read(),read()};
}
sort(Edge+,Edge+m+);
for(int i=;i<=n;i++) father[i]=i;
for(int i=;i<=m;i++)
{
int u=FindFather(Edge[i].a),v=FindFather(Edge[i].b);
if(u!=v)
{
father[u]=v;
AddEdge(Edge[i].a,Edge[i].b,Edge[i].c);
}
}
for(int i=;i<=n;i++) if(!vis[i]) LCA(i);
while(k--)
{
int x=read(),y=read();
printf("%d\n",query(x,y));
}
}
//----------------------------------------------------
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>'') {
if(ch=='-') f=-;ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}

BZOJ 3732 Network的更多相关文章

  1. BZOJ 3732: Network 最小生成树 倍增

    3732: Network 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 &l ...

  2. bzoj 3732 Network(最短路+倍增 | LCT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3732 [题意] 给定一个无向图,处理若干询问:uv路径上最长的边最小是多少? [思路一 ...

  3. bzoj 3732: Network 树上两点边权最值

    http://www.lydsy.com/JudgeOnline/problem.php?id=3732 首先想到,要使得最长边最短,应该尽量走最短的边,在MST上. 然后像LCA那样倍增娶个最大值 ...

  4. BZOJ 3732 Network —— 最小生成树 + 倍增LCA

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 <= N <= 15, ...

  5. Kruskal重构树+LCA || BZOJ 3732: Network

    题面:https://www.lydsy.com/JudgeOnline/problem.php?id=3732 题解:Kruskal重构树板子 代码: #include<cstdio> ...

  6. [bzoj 3732] Network (Kruskal重构树)

    kruskal重构树 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第 ...

  7. 【刷题】BZOJ 3732 Network

    Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_ ...

  8. BZOJ 3732 Network Link-Cut-Tree (我是认真的!!

    题目大意:给定一个n个点m条边的无向连通图.k次询问两点之间全部路径中最长边的最小值 LCT的裸题! 首先维护一个动态的最小生成树,然后每次增加边时删除两点间路径上权值最大的边.最后询问时直接求x到y ...

  9. BZOJ 3732 Network 最小瓶颈路

    题目大意:给出一个无向边,非常多询问,问x,y两地之间的最长路最短是多少. 思路:乍一看好像是二分啊. 的确这个题二分能够做.可是时间会慢非常多,有的题直接就T掉(NOIP2013货车运输). 事实上 ...

随机推荐

  1. 集成ShareSDK,分享成功后QQ和空间回调不执行的可能原因

    AndroidMainifest.xml中的如箭头所示的id与assets下ShareSDK.xml中配置的QQ的AppId一定要相同.

  2. NodeOS操作系统

    导读 我想大多数人听说过 Node.js,但是你听说过 NodeOS 吗?一个用 Node.js 写的操作系统,NodeOS 用 Linux 内核来处理各种底层任务,比如硬件通讯什么的,但是除此之外, ...

  3. jquery .attr()

    在JS中设置节点的属性与属性值用到setAttribute(),获得节点的属性与属性值用到getAttribute(),而在jquery中,用一个attr()就可以全部搞定了,赞一个先 ^^ jque ...

  4. 【Cocos2d-x 3.x】屏幕自适应匹配

    在进行游戏开发时, 由于市场上的Android移动设备的分辨率有很多种,而且IOS移动设备的分辨率也不相同,为了能让手游能在90%以上的移动设备较为完美的运行,因此需要考虑屏幕的自适应问题,让一套资源 ...

  5. PC windows mobile 文件拷贝

    在windows 系统中提供 RAPI.DLL,只需将RAPI.DLL中的,函数导出就可以实现文件拷贝.

  6. lua随机数函数

    function rnd(max)  --lua的第1次random数不靠谱,取第3次的靠谱  local ret=0  math.randomseed(os.time())  for i=1,3 d ...

  7. Smart_Script

    target_type Name Value target_param1 target_param2 target_param3 target_x target_y target_z target_o ...

  8. 备忘录模式(Memento Pattern)

    在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 备忘录模式主要思想是——利用备忘录对象来对保存发起人的内部状态,当发起人需要恢复原 ...

  9. WebAPI学习点滴(一)

    对于GET请求,如果方法名不是以Get开头,就必须加上[HttpGet]标签,不然无法找到该方法,如果是以Get开头则没有这个问题. 因此,推荐所有方法都确定访问方式,加上标签. [HttpGet] ...

  10. 安装zabbix,make的时候报错

    CDPATH= && /bin/bash /install/Mesa-/bin/missing aclocal-1.14 -I m4 /install/Mesa-/bin/missin ...