# [HLOI 2015]Magic

3 3
2 3 5
1 3
3 1
2 2

10

## 题解

• 二分+最短路，裸题
• 第一次看见HLJ的省选
• 这么写好像比标算还要优233
对比我的代码风格2333333
const
maxn=100000;
var
p,dist,x:array[0..maxn]of longint;
t:array[0..4*maxn]of longint;
w:array[0..4*maxn,1..3]of longint;
i,j,k:longint;
n,m,a,b,c,len,l,r,mid,ans:longint;
function gcd(a,b:longint):longint;
begin
if b=0
then gcd:=a
else gcd:=gcd(b,a mod b);
end;

function lcm(a,b:longint):longint;
begin
exit(a*(b div gcd(a,b)));
end;

procedure init(a,b,c:longint);
begin
w[len,1]:=b; w[len,2]:=c;
if w[a,3]=0
then w[a,3]:=len else w[w[a,1],3]:=len;
w[a,1]:=len; inc(len);
end;

function spfa(a:longint):longint;
begin
for i:=1 to n do
dist[i]:=1000000000;
begin
while tt<>0 do
begin
if w[tt,2]>a then dis:=1 else dis:=0;
if dist[v]+dis<dist[w[tt,1]]
then
begin
dist[w[tt,1]]:=dist[v]+dis;
if p[w[tt,1]]=0
then begin t[tail]:=w[tt,1]; inc(tail); p[w[tt,1]]:=1; end;
end;
tt:=w[tt,3];
end;
p[v]:=0;
end;
if dist[n]=0 then exit(1) else exit(0);
end;

begin
for i:=1 to n do
for i:=1 to m do
begin
readln(a,b); c:=lcm(x[a],x[b]); if c>r then r:=c;
init(a,b,c);
init(b,a,c);
end;
l:=0;
while l<r do
begin
mid:=(l+r)>>1;
if spfa(mid)=0
then l:=mid+1
else r:=mid;
end;
writeln(l);
end.
var
z,p,dist:array[0..100000]of longint;
t:array[0..500000]of longint;
w:array[0..300000,1..3]of longint;
i,j:longint;
n,m,k,s:longint;
function gcd(a,b:longint):longint;
begin
if b=0 then exit(a);
gcd:=gcd(b,a mod b);
end;

function lcm(a,b:longint):longint;
begin
exit(a*b div gcd(a,b));
end;

function spfa(a:longint):longint;
var
i,j:longint;
begin
for i:=2 to n do
dist[i]:=100000000;
begin
begin
tt:=w[t[i],3];
while tt<>0 do
begin
if w[tt,2]>a then pp:=1 else pp:=0;
if dist[t[i]]+pp<dist[w[tt,1]]
then
begin
dist[w[tt,1]]:=dist[t[i]]+pp;
if p[w[tt,1]]=0
then begin t[y]:=w[tt,1]; inc(y); end;
end;
tt:=w[tt,3];
end;
inc(x);
p[t[i]]:=0;
end;
end;
if dist[n]=0 then exit(1) else exit(0);
end;

begin
//assign(input,'magic.in'); assign(output,'magic.out'); reset(input); rewrite(output);
for i:=1 to n do
for i:=1 to m do
begin
w[k,1]:=b;
w[k,2]:=c;
if w[a,3]=0
then w[a,3]:=k
else w[w[a,1],3]:=k;
w[a,1]:=k;
inc(k);
w[k,1]:=a;
w[k,2]:=c;
if w[b,3]=0
then w[b,3]:=k
else w[w[b,1],3]:=k;
w[b,1]:=k;
inc(k);
if c>r then r:=c;
end;
l:=0;
while l<r do
begin
mid:=(l+r)div 2;
if spfa(mid)=1
then r:=mid
else l:=mid+1;
end;
if spfa(l)=1
then writeln(l)
else writeln(-1);
//close(input); close(output);
end.


• 本文已收录于以下专栏：

## HLOI2016 滚粗记

• lzr010506
• 2016年04月22日 21:38
• 19122

## [HLOI 2015]Magic

Magic时间限制 2S 内存限制 128M题目描述给定n个点m条边的图，每个点有一个点权ai，两点之间的边的边权为两点点权的最小公倍数。 从1号点走到n号点所需要的花费为路径上边权的最大值。 问...
• slongle_amazing
• 2015年07月11日 10:47
• 478

## [省选] [线段树] [HLOI2016] 字符串问题

HLOI2016Day1T1
• HeRaNO
• 2017年02月18日 15:55
• 398

## 如何让Magic Mouse真正拥有Magic

Magic Mouse是苹果电脑的专属配件，它的庐山真面目就如题图一样，乍一看觉得除了外形像个鼠标，其它地方貌似都和普通的鼠标格格不入，起码连个最基本的滚轮都没有，但是既然敢叫Magic Mouse，...
• littlewhite1989
• 2014年12月03日 13:55
• 2279

## sh: ./hello: not executable: magic 7F45

￥arm-linux-gnueabi-gcc hello.c --static -o hello 编成静态
• lee1106hello
• 2012年03月09日 16:35
• 10295

## [省选] [DP] [HLOI2015] Color

HLOI2015T2
• HeRaNO
• 2016年05月02日 16:18
• 456

## 初始项目——快速入手之感

• u013030601
• 2016年01月31日 16:51
• 851

## python中的magic方法

• andrewgithub
• 2016年11月29日 22:01
• 427

• sxjk1987
• 2012年12月31日 15:47
• 10947

## [省选] [线段树] [DFS序] [矩阵快速幂] [HLOI2015] Tree

HLOI2015T3
• HeRaNO
• 2016年05月02日 17:02
• 722

举报原因： 您举报文章：[HLOI 2015]Magic 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)