Codevs3278[NOIP2013]货车运输
3287 货车运输
2013年NOIP全国联赛提高组
A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。
第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道路。
接下来 m 行每行 3 个整数 x、y、z,每两个整数之间用一个空格隔开,表示从 x 号城市到 y 号城市有一条限重为 z 的道路。注意:x 不等于 y,两座城市之间可能有多条道路。
接下来一行有一个整数 q,表示有 q 辆货车需要运货。
接下来 q 行,每行两个整数 x、y,之间用一个空格隔开,表示一辆货车需要从 x 城市运输货物到 y 城市,注意:x 不等于 y。
输出共有 q 行,每行一个整数,表示对于每一辆货车,它的最大载重是多少。如果货车不能到达目的地,输出-1。
4 3
1 2 4
2 3 3
3 1 1
3
1 3
1 4
1 3
3
-1
3
对于 30%的数据,0 < n < 1,000,0 < m < 10,000,0 < q < 1,000;
对于 60%的数据,0 < n < 1,000,0 < m < 50,000,0 < q < 1,000;
对于 100%的数据,0 < n < 10,000,0 < m < 50,000,0 < q < 30,000,0 ≤ z ≤ 100,000。
分类标签 Tags 点此展开
题解:本来想把这道题当作个娱乐的,可是一写就逗比了,然后疯狂查错,查得要疯了——结果发现一开始快排写错了(HansBug:巨汗*_* phile:我也是醉疯了)
别的不难,思路就是——先最大生成树,然后每次只要访问在这棵树上面的路径的瓶颈值即可,我用了下lca算法,可是看样子时间相当之充裕让我都吓了一跳,所以估计就算是暴力找路的话估计也能差不多AC么么哒
type
point=^node;
node=record
g,w:longint;
next:point;
end;
var
i,j,k,l,m,n,tt,t,yy:longint;
a:array[..,..] of longint;
c,ct,f:array[..] of longint;
d,e:array[..,..] of longint;
b:array[..] of point;
function max(x,y:longint):longint;
begin
if x>y then max:=x else max:=y;
end;
function min(x,y:longint):longint;
begin
if x<y then min:=x else min:=y;
end;
function getfat(x:longint):longint;
begin
if x<>c[x] then c[x]:=getfat(c[x]);
exit(c[x]);
end;
procedure merge(x,y:longint);
var a1,a2:longint;
begin
a1:=getfat(x);a2:=getfat(y);
if a1=a2 then exit;
c[getfat(x)]:=getfat(y);
dec(tt);
end;
function tog(x,y:longint):boolean;
begin
exit(getfat(x)=getfat(Y));
end;
procedure swap(var x,y:longint);
var z:longint;
begin
z:=x;x:=y;y:=z;
end;
procedure sort(l,r:longint);
var i,j,x,y:longint;
begin
i:=l;j:=r;x:=a[(l+r) div ,];
repeat
while a[i,]>x do inc(i);
while a[j,]<x do dec(j);
if i<=j then
begin
swap(a[i,],a[j,]);
swap(a[i,],a[j,]);
swap(a[i,],a[j,]);
inc(i);dec(j);
end;
until i>j;
if i<r then sort(i,r);
if l<j then sort(l,j);
end;
procedure add(x,y,z:longint);
var p:point;
begin
new(p);
p^.w:=z;p^.g:=y;
p^.next:=b[x];b[x]:=p;
end;
procedure dfs(x:longint);
var p:point;
begin
p:=b[x];
while p<>nil do
begin
if d[,p^.g]= then
begin
d[,p^.g]:=x;
e[,p^.g]:=p^.w;
f[p^.g]:=f[x]+;
dfs(p^.g);
end;
p:=p^.next;
end;
end;
function fatfat(x,y:longint):longint;
var i,j:longint;
begin
i:=;
while y> do
begin
if odd(y) then x:=d[i,x];
inc(i);y:=y div ;
end;
exit(x);
end;
function fatlen(x,y:longint):longint;
var i,j:longint;
begin
i:=;j:=maxlongint;
while y> do
begin
if odd(y) then
begin
j:=min(j,e[i,x]);
x:=d[i,x];
end;
inc(i);y:=y div ;
end;
exit(j);
end;
function getlent(x,y:longint):longint;
var a1,a2,a3,a4,i:longint;
begin
if c[x]<>c[y] then exit(-);
if f[x]<f[y] then swap(x,y);
a3:=x;a4:=y;
x:=fatfat(x,f[x]-f[y]);
if x=y then exit(fatlen(a3,f[a3]-f[a4]));
for i:= downto do
begin
if not((d[i,x]=) or (d[i,x]=d[i,y])) then
begin
x:=d[i,x];
y:=d[i,y];
end;
end;
a1:=d[,x];
exit(min(fatlen(a4,f[a4]-f[a1]),fatlen(a3,f[a3]-f[a1])));
end;
begin
readln(n,m);
for i:= to m do readln(a[i,],a[i,],a[i,]);
sort(,m);
FOR I:= to n do c[i]:=i;
tt:=n;
for i:= to m do
merge(a[i,],a[i,]);
for i:= to n do c[i]:=i;
for i:= to n do b[i]:=nil;
j:=;
fillchar(d,sizeof(d),);yy:=tt;
for i:= to n-yy do
begin
inc(j);
while tog(a[j,],a[j,]) do inc(j);
add(a[j,],a[j,],a[j,]);
add(a[j,],a[j,],a[j,]);
merge(a[j,],a[j,]);
end;
for i:= to n do c[i]:=getfat(c[i]);
fillchar(ct,sizeof(ct),);
fillchar(f,sizeof(f),);
for i:= to n do
begin
if ct[c[i]]= then
begin
ct[c[i]]:=;
d[,i]:=-;
dfs(i);
d[,i]:=;
end;
end;
for i:= to do
for j:= to n do
begin
d[i,j]:=d[i-,d[i-,j]];
if (e[i-,d[i-,j]]<>) and (e[i-,j]<>) then
e[i,j]:=min(e[i-,d[i-,j]],e[i-,j])
else
begin
if e[i-,d[i-,j]]= then
begin
if e[i-,j]= then
e[i,j]:=maxlongint
else
e[i,j]:=e[i-,j] end
else
e[i,j]:=e[i-,d[i-,j]];
end;
end;
readln(t);
for i:= to t do
begin
readln(j,k);
writeln(getlent(j,k));
end;
readln;
end.
Codevs3278[NOIP2013]货车运输的更多相关文章
- [Luogu 1967] NOIP2013 货车运输
[Luogu 1967] NOIP2013 货车运输 一年多前令我十分头大的老题终于可以随手切掉了- 然而我这码风又变毒瘤了,我也很绝望. 看着一年前不带类不加空格不空行的清纯码风啊,时光也好像回去了 ...
- NOIP2013 货车运输(最大生成树,倍增)
NOIP2013 货车运输(最大生成树,倍增) A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道 ...
- NOIP2013 货车运输 (最大生成树+树上倍增LCA)
死磕一道题,中间发现倍增还是掌握的不熟 ,而且深刻理解:SB错误毁一生,憋了近2个小时才调对,不过还好一遍AC省了更多的事,不然我一定会疯掉的... 3287 货车运输 2013年NOIP全国联赛提高 ...
- NOIP2013 货车运输
3.货车运输 (truck.cpp/c/pas) [问题描述] A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货 ...
- 【洛谷P1967】[NOIP2013]货车运输
货车运输 题目链接 显然,从一点走到另一点的路径中,最小值最大的路径一定在它的最大生成树上 所以要先求出最大生成树,再在生成树上找最近公共祖先,同时求出最小值. #include<iostrea ...
- noip2013货车运输
P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过 ...
- NOIP2013货车运输[lca&&kruskal]
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
- [noip2013]货车运输(kruskal + 树上倍增)
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...
- [luogu P1967][NOIp2013] 货车运输
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
随机推荐
- VS生成时复制文件到指定目录
1.右键项目属性,选择生成事件,再点击"编辑后生成事件",可以直接在编辑框内填写命令行,如图: 2.也可以在弹出的编辑框内,写命令,$(ProjectDir)这种是系统的宏路径,具 ...
- 在MyEclipse 2014中给Spket增加ExtJS提示
参考:http://wenku.baidu.com/link?url=BT2U6Z-HktQJQYpz3Jp88pJSp4lU-lXkvCqpdeaa9a-BVdOgMGK1vj486-32YC4Gq ...
- 大咖,我能转行做UX设计师吗?
前几天,有个朋友找到我,叫我给分析下他适不适合转UX设计.他的专业是建筑设计,之所以要辞职,也就是公司破事多,老板又不看重他.看到UX设计这个行业的前景很不错,想要转行.他说的也没错, 现在的UX设计 ...
- 玩转spring boot——结合阿里云持续交付
前言 在互联网项目中,项目测试.部署往往需要花费大量时间.传统方式是在本地打包.测试完毕程序,然后通过ftp上传至服务器,再把测试的配置文件修改为生产环境的配置文件,最后重新运行服务.这一过程如果交给 ...
- CI Weekly #13 | 用更 Geek 的方式配置你的 CI 工作流
flow.ci 的重大更新来了--支持通过 .yml 文件配置工作流(测试阶段),具体的使用方法可参考文档:同时 flow.ci 也开放了社区>> club.flow.ci,使用的任何问题 ...
- jq操作img大小(动态修改)
今天适配app页面是约到一个问题 当我们要显示后台传过来若干个尺寸不一的图片时,为了保证图片大小的一致性及比例的协调,需要动态改变图片显示尺寸. 通过搜索,我们可以从网上找到实现此功能的jQuery代 ...
- UUID错误
在Archive项目时,出现了“Your build settings specify a provisioning profile with the UUID “”, however, no suc ...
- 导入AS项目出现类文件全部报红色J 原因
大家可能遇到过这么一个问题 就是用androidStudio 导入一个新的demo的时候会出现下图的字样 看了是不是很懵逼 我当时看了也是一脸懵逼 这是什么玩意啊.也不报错.也不提示哪里错了 后来我 ...
- Nginx工作原理
Nginx的模块 Nginx由内核和模块组成. Nginx的模块从结构上分为核心模块.基础模块和第三方模块: 核心模块:HTTP模块.EVENT模块和MAIL模块 基础模块:HTTP Access模块 ...
- php处理登录、添加数据、删除数据和修改数据
php 处理登录 :需要先建一个登录的页面,用form表单就可以很轻松的完成,(这里的示例是我根据数据库现成的表做的 是一个teacher表格 根据老师的工号和姓名登录的) <form acti ...