小A的最短路

2021-10-08 17:38:25 字數 1996 閱讀 7057

樹上問題求兩個點的最短距離,顯然能用lca

lcalc

a來進行log

nlog_n

logn

​的查詢,引入了兩個無邊權的點,所以我們的路勁就可以規劃成三種x

−>y,

x−

>u−

>v−

>y,

x−

>v−

>

u>−y

x -> y, x -> u -> v -> y, x -> v -> u >- y

x−>y,

x−>u−

>v−

>y,

x−>v−

>

u>−y

,只要在這三個當中取乙個最小值就行了。接下來就是考慮求lca

lcalc

a了,有一種較為快速的求lca

lcalc

a ca

lcalc

a較為好寫),然後就可以開始最短路求解了。

/*

*/#pragma gcc optimize(2)

#pragma gcc optimize(3)

#include

#define mp make_pair

#define pb push_back

#define endl '\n'

using

namespace std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef pair pii;

const

double pi =

acos(-

1.0)

;const

double eps =

1e-7

;const

int inf =

0x3f3f3f3f

;inline ll read()

while

(c >=

'0'&& c <=

'9')

return f * x;

}void

print

(ll x)

print

(x /10)

;putchar

(x %10+

48);}

const

int n =

3e5+10;

int sz[n]

, son[n]

, fa[n]

, dep[n]

, top[n]

, n, m;

int head[n]

, to[n <<1]

, nex[n <<1]

, cnt =1;

void

add(

int x,

int y)

void

dfs1

(int rt,

int f)

}void

dfs2

(int rt,

int tp)

}int

lca(

int x,

int y)

return dep[x]

< dep[y]

? x : y;

}int

dis(

int x,

int y)

intmain()

int u =

read()

, v =

read()

;dfs1(1

,0);

dfs2(1

,1);

m =read()

;for

(int i =

1; i <= m; i++))

);}return0;

}

最短路 求最長最短路,求最短路的路徑

hdu 1595 find the longest of the shortest include include include include include include include include include include include include include defi...

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...