codevs 3287 货车运输 NOIP2013提高组
题目链接:http://codevs.cn/problem/3287/
题解:
和bzoj3732一毛一样,只不过是找最大生成树和最小值罢了,具体参见我的bzoj3732的博客
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAXN 100010
#define MAXM 1000010
int n,m,k,heade[MAXN],father[MAXN],fa[][MAXN],dep[MAXN];
struct edge1
{
int u,v,val;
}e1[MAXM];
struct edge
{
int v,next,val;
}e[MAXM];
int min(int x,int y)
{
return x<y?x:y;
}
int find(int x)
{
return father[x]=father[x]==x?x:find(father[x]);
}
bool cmp(edge1 a,edge1 b)
{
return a.val>b.val;
}
void adde(int i,int x,int y,int z)
{
e1[i]=(edge1){x,y,z};
}
void dfs(int u)
{
for(int i=heade[u];i;i=e[i].next)
{
if(!dep[e[i].v])
{
dep[e[i].v]=dep[u]+;
fa[][e[i].v]=u;
dfs(e[i].v);
}
}
}
int LCA(int u,int v)
{
if(dep[u]>dep[v])swap(u,v);
for(int i=;~i;i--)
if(dep[fa[i][v]]>=dep[u])
v=fa[i][v];
if(u==v)return u;
for(int i=;~i;i--)
if(fa[i][u]!=fa[i][v])
{
u=fa[i][u];
v=fa[i][v];
}
return fa[][u];
}
int main()
{
scanf("%d%d",&n,&m);
int x,y,z;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
adde(i<<,x,y,z);
adde(i<<+,y,x,z);
}
for(int i=;i<=n;i++)
father[i]=i;
sort(e1+,e1+m*+,cmp);
int cnt=;
for(int i=;i<=m*;i++)
{
x=find(e1[i].u);
y=find(e1[i].v);
if(x!=y)
{
int u=e1[i].u,v=e1[i].v;
father[y]=x;
++cnt;
e[cnt<<]=(edge){v,heade[u],e1[i].val};
heade[u]=cnt<<;
e[(cnt<<)+]=(edge){u,heade[v],e1[i].val};
heade[v]=(cnt<<)+;
if(cnt==n-)break;
}
}
dep[]=fa[][]=;
dfs();
for(int i=;i<=;i++)
for(int j=;j<=n;j++)
fa[i][j]=fa[i-][fa[i-][j]];
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&x,&y);
int lca=LCA(x,y),t=x,ans=;
if(!lca)
{
printf("-1\n");
continue;
}
while(t!=lca)
{
for(int i=heade[t];i;i=e[i].next)
{
if(dep[e[i].v]<dep[t])
{
t=e[i].v;
ans=min(ans,e[i].val);
break;
}
}
}
t=y;
while(t!=lca)
{
for(int i=heade[t];i;i=e[i].next)
{
if(dep[e[i].v]<dep[t])
{
t=e[i].v;
ans=min(ans,e[i].val);
break;
}
}
}
printf("%d\n",ans);
}
return ;
}
codevs 3287 货车运输 NOIP2013提高组的更多相关文章
- Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...
- Codevs 3287 货车运输 == 洛谷P1967
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description A 国有 n 座城市,编 ...
- Codevs 3287 货车运输
题目描述 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过 ...
- [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
一开始觉得是网络流..仔细一看应该是最短路,再看数据范围..呵呵不会写...这道题是最大生成树+最近公共祖先.第一次写..表示各种乱.. 因为要求运输货物质量最大,所以路径一定是在最大生成树上的.然后 ...
- [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路
[NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路 题目大意: 对于长度为\(n(n\le10^5)\)的非负数列\(A\),每次可以选取一个区间\(-1\).问将数列清零至少需要 ...
- [NOIP2013 提高组] 华容道 P1979 洛谷
[NOIP2013 提高组] 华容道 P1979 洛谷 强烈推荐,更好的阅读体验 经典题目:spfa+bfs+转化 题目大意: 给出一个01网格图,和点坐标x,y空格坐标a,b,目标位置tx,ty要求 ...
- 【NOIP2013提高组】货车运输
货车运输 (truck.cpp/c/pas) [问题描述] A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有q辆货车在运输货物,司机们想知道每辆 ...
- 洛谷P1967 [NOIP2013提高组Day1T2]货车运输
P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过 ...
- NOIP2013 提高组 Day1
https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%7C30 期望得分:100+100+100=300 实际得 ...
随机推荐
- 转:Conjugate prior-共轭先验的解释
Conjugate prior-共轭先验的解释 原文:http://blog.csdn.net/polly_yang/article/details/8250161 一 问题来源: 看PRML第 ...
- 状态压缩---UVA6625 - Diagrams & Tableaux
比赛的时候刷出来的第一个状态DP.(期间有点没有把握是状态DP呢.) 题意:题意还是简单的.K行的方格.之后输入L1~LK 代表每一行方格数.在这些往左紧挨的方格子里填上1~N的数字. 其中右边格子的 ...
- 【题解】CF#855 G-Harry Vs Voldemort
个人感觉挺有意思的,然而被颜神D无聊惹(- ̄▽ ̄)- 这题我们可以首先试图去统计以每一个点作为 w 点所能对答案造成的贡献是多少.不难发现,当且仅当 u 和 v 都在 w 所在边双的一侧的时候不能构成 ...
- 原 cocos2dx中毒冰冻shader
#ifdef GL_ES precision mediump float; #endif uniform sampler2D u_texture; varying vec2 v_texCoord; v ...
- POJ1816:Wild Words——题解
http://poj.org/problem?id=1816 比较麻烦的trie. 首先你需要选择针对n还是m建立trie,这里我选择了针对n. 那么就需要面临卡空间的问题. 这里提供了一种链式前向星 ...
- BZOJ1016:[JSOI2008]最小生成树计数——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1016 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不 ...
- bzoj3302&bzoj2447&bzoj2103(树的重心)
三倍的幸福! 暴力的做法就是枚举每一条边断开,选的两个点就是左右两棵树的重心. 可以发现找重心的时候一定是往权和大的子树找的,需要维护一个点的最大和次大子树,因为最大子树可能被割掉了,实际效率为O(N ...
- JAVA对象的深度克隆
有时候,我们需要把对象A的所有值复制给对象B(B = A),但是这样用等号给赋值你会发现,当B中的某个对象值改变时,同时也会修改到A中相应对象的值! 也许你会说,用clone()不就行了?!你的想法只 ...
- Dumpsdecrypted
Dumps decrypted mach-o files from encrypted iPhone applications from memory to disk. This tool is ne ...
- zookeeper源码分析之leader选举
zookeeper提供顺序一致性.原子性.统一视图.可靠性保证服务zookeeper使用的是zab(atomic broadcast protocol)协议而非paxos协议zookeeper能处理并 ...