codevs1036 商務旅行

2022-06-03 22:18:15 字數 2859 閱讀 3025

題目描述 description

某首都城市的商人要經常到各城鎮去做生意,他們按自己的路線去做,目的是為了更好的節約時間。

假設有n個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路連線,任意兩個城鎮之間如果有直連道路,在他們之間行駛需要花費單位時間。該國公路網路發達,從首都出發能到達任意乙個城鎮,並且公路網路不會存在環。

你的任務是幫助該商人計算一下他的最短旅行時間。

輸入描述 input description

輸入檔案中的第一行有乙個整數n,1<=n

<=30 000,為城鎮的數目。下面n-1行,每行由兩個整數a 和b (1<=a, b

<=n; a<>b)組成,表示城鎮a和城鎮b有公路連線。在第n+1行為乙個整數m,下面的m行,每行有該商人需要順次經過的各城鎮編號。

輸出描述 output description

在輸出檔案中輸出該商人旅行的最短時間。

樣例輸入 sample input

5
1 2
1 5
3 5
4 5
4
1
3
2
5
樣例輸出 sample output

7資料範圍及提示 data size & hint

題解:

倍增:

#include#include

#include

#include

using

namespace

std;

const

int maxn=30000+5

;inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}int

n,m,num,ans;

int head[maxn],dep[maxn],f[maxn][20

];bool

vis[maxn];

struct

node

e[maxn

<<1

];void add(int

from,int

to)void dfs(int x,int

d) }

}int lca(int a,int

b)

int d=dep[a]-dep[b];

for(int i=0;i<=15;i++)

if(d&(1

if(a==b) return

a;

for(int i=15;i>=0;i--)

if(f[a][i]!=f[b][i])

return f[a][0];}

intmain()

dfs(

1,1);

for(int j=1;j<=15;j++)

for(int i=1;i<=n;i++)

f[i][j]=f[f[i][j-1]][j-1

]; m=read();

int x=1

,y;

for(int i=1;i<=m;i++)

printf(

"%d\n

",ans);

return0;

}

view code

tarjan演算法:

#include#include

#include

#include

using

namespace

std;

const

int maxn=30000+5

;inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}int

n,m,num,qnum,ans;

int head[maxn],qhead[maxn],father[maxn],dep[maxn],f[maxn][20],a[maxn][3

];bool

vis[maxn];

struct

node

e[maxn

<<1

];struct

qnode

q[maxn

<<1

];void add(int

from,int

to)void qadd(int

from,int to,int

k)int find(int

x)void merge(int x,int

y)void tarjan(int

x)

for(int i=head[x];i;i=e[i].next)

}}int

main()

m=read();

int x=1

,y;

for(int i=1;i<=m;i++)

tarjan(1);

for(int i=1;i<=m;i++)

ans+=dep[a[i][0]]+dep[a[i][1]]-(dep[a[i][2]]<<1

); printf(

"%d\n

",ans);

return0;

}

view code

CodeVS1036 商務旅行

某首都城市的商人要經常到各城鎮去做生意,他們按自己的路線去做,目的是為了更好的節約時間。假設有n個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路連線,任意兩個城鎮之間如果有直連道路,在他們之間行駛需要花費單位時間。該國公路網路發達,從首都出發能到達任意乙個城鎮,並且公路網路不會存在環。你...

Codevs 1036 商務旅行

1036 商務旅行 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 傳送門題目描述 description 某首都城市的商人要經常到各城鎮去做生意,他們按自己的路線去做,目的是為了更好的節約時間。假設有n個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路連線...

Codevs 1036 商務旅行

時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題目描述 假設有n個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路連線,任意兩個城鎮之間如果有直連道路,在他們之間行駛需要花費單位時間。該國公路網路發達,從首都出發能到達任意乙個城鎮,並且公路網路不會存在環。...