P1967 货车运输
P1967 货车运输
最大生成树+lca+并查集
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<set>
#include<map>
#include<stack>
#include<cstring>
#define inf 2147483647
#define For(i,a,b) for(register int i=a;i<=b;i++)
#define p(a) putchar(a)
#define g() getchar()
//by war
//2017.11.8
using namespace std;
int n,m,q;
int x,y,z;
int cnt;
int Min[][];
int f[][];
int d[];
int deep[]; struct kru
{
int l,r,v;
bool operator<(const kru&a)const
{
return v>a.v;
}
}E[]; struct node
{
int n;
int v;
node *next;
}*e[]; inline void in(register int &x)
{
int y=;
char c=g();x=;
while(c<''||c>'')
{
if(c=='-')
y=-;
c=g();
}
while(c<=''&&c>='')x=(x<<)+(x<<)+c-'',c=g();
x*=y;
}
inline void o(register int x)
{
if(x<)
{
p('-');
x=-x;
}
if(x>)o(x/);
p(x%+'');
} inline int find(register int x)
{
if(d[x]==x)return x;
d[x]=find(d[x]);
return d[x];
} inline void push(register int x,register int y,register int v)
{
node *p;
p=new node();
p->n=y;
p->v=v;
if(e[x]==NULL)
e[x]=p;
else
{
p->next=e[x]->next;
e[x]->next=p;
}
} inline void build(register int now)
{
deep[now]=deep[f[now][]]+;
for(register int i=;(<<i)<=n;i++)
{
Min[now][i]=min(Min[now][i-],Min[f[now][i-]][i-]);
f[now][i]=f[f[now][i-]][i-];
}
for(node *i=e[now];i!=NULL;i=i->next)
{
if(i->n!=f[now][])
{
f[i->n][]=now;
Min[i->n][]=i->v;
build(i->n);
}
}
} int query(int x,int y)
{
int MIN=inf;
if(deep[x]<deep[y])
swap(x,y);
int c=deep[x]-deep[y];
for(register int i=;(<<i)<=c;i++)
if((<<i)&c)
{
MIN=min(MIN,Min[x][i]);
x=f[x][i];
}
if(x==y)
return MIN;
c=log2(deep[x]);
for(register int i=c;i>=;i--)
{
if(f[x][i]!=f[y][i])
{
MIN=min(MIN,Min[x][i]);
MIN=min(MIN,Min[y][i]);
x=f[x][i];
y=f[y][i];
}
}
return min(MIN,min(Min[y][],Min[x][]));
} int main()
{
in(n),in(m);
For(i,,n)
d[i]=i;
For(i,,m)
in(E[i].l),in(E[i].r),in(E[i].v);
sort(E+,E+m+);
For(i,,m)
{
if(find(E[i].l)!=find(E[i].r))
{
d[find(E[i].l)]=find(E[i].r);
cnt++;
push(E[i].l,E[i].r,E[i].v);
push(E[i].r,E[i].l,E[i].v);
}
if(cnt==n-)
break;
}
Min[][]=inf;
build();
in(q);
For(i,,q)
{
in(x),in(y);
if(find(x)!=find(y))
o(-),p('\n');
else
o(query(x,y)),p('\n');
}
return ;
}
P1967 货车运输的更多相关文章
- 洛谷 P1967 货车运输
洛谷 P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在 ...
- 洛谷P3379lca,HDU2586,洛谷P1967货车运输,倍增lca,树上倍增
倍增lca板子洛谷P3379 #include<cstdio> struct E { int to,next; }e[]; ],anc[][],log2n,deep[],n,m,s,ne; ...
- Luogu P1967 货车运输(Kruskal重构树)
P1967 货车运输 题面 题目描述 \(A\) 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\) ,城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 \ ...
- 【杂题总汇】NOIP2013(洛谷P1967) 货车运输
[洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...
- P1967 货车运输(倍增LCA,生成树)
题目链接: https://www.luogu.org/problemnew/show/P1967 题目描述 A国有n座城市,编号从 1到n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制, ...
- 洛谷 P1967 货车运输 Label: 倍增LCA && 最小瓶颈路
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
- 洛谷 P1967 货车运输(克鲁斯卡尔重构树)
题目描述 AAA国有nn n座城市,编号从 11 1到n nn,城市之间有 mmm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qqq 辆货车在运输货物, 司机们想知道每辆车在不超过车 ...
- P1967 货车运输 树链剖分
题目描述 AA国有nn座城市,编号从 11到nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最 ...
- 洛谷P1967 货车运输
题目描述 \(A\)国有\(n\)座城市,编号从\(1\)到\(n\),城市之间有\(m\)条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有\(q\)辆货车在运输货物, 司机们想知道每辆车在 ...
随机推荐
- SQL*Plus工具
或者
- Confluence 6 理解你许可证的用户数
基于你的许可证类型,在你 Confluence 可以被注册的用户也许有限制. 在许可证明细页面中,将会告诉当前使用了多少的许可证(你注册的用户数量). 包括仅仅在 Confluence 中可以使用gl ...
- python之多线程通信
共享变量通信 事实上共享变量通信是会造成线程安全的,除非我们对这个共享变量是有足够了解的,如非必要就不要使用共享变量在线程间进行通信 Queue通信 理解不深入,暂不写
- linux和windows下,C/C++开发的延时函数,sleep函数
简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 在VC中使用带上头文件 #include < ...
- laravel 资源控制器
Artisan 生成器来生成一个资源控制器(在之前命名后加上 --resource 选项) php artisan make:controller PostController --resource ...
- Win#password;;processon #clone;;disassemble;;source find
1.密码学思维导图 源地址:https://www.processon.com/view/5a61d825e4b0c090524f5b8b 在这之前给大家分享 如何在 processon上搜索公开克隆 ...
- 读C#开发实战1200例子记录-2017年8月14日11:20:38获取汉字编码值
try { char chr = textBox1.Text[0]; byte[] gb2312_bt = Encoding.GetEncoding("gb2312").GetBy ...
- 关于yum网络版仓库(本地yum仓库的安装配置,如果没网了,做一个局域网内的yum仓库)
2017-11-13 22:49:48 1:两种方式: a.每一台机器都配一个本地文件系统上的yum仓库 file:///packege/path/ b.在局域网内部配置一台节点(server-b ...
- CentOS升级glibc-2.14
升级glibc-2.14用到的rpm https://pan.baidu.com/s/1v-Uk579TGM6498cExst6ow 先要安装gcc yum -y install gcc 执行: rp ...
- ES6中const、let与var的对比详解
对比 声明方式 变量提升 作用域 初始值 重复定义const 否 块级 需要 不允许let 否 块级 不需要 不允许var 是 函数级 不需要 允许 变量提升:const 和 l ...