HDU 4547 CD操作 LCA倍增

2022-05-26 20:24:09 字數 1016 閱讀 2017

題目傳送門:hdu - 4547 cd操作

略求出目錄a 到 b所需要的cd操作次數,這裡的a b 位字串 所以用到map對映,之後直接求lca分情況討論即可:設求a到b的cd運算元

1、a==b  需要的cd運算元是0

2、a是b的最近公共祖先,則a-->b的cd運算元是0

3、b是a的最近公共祖先,則b-->a的cd運算元是 deep[b]-deep[b]

4、若互相不是最近公共祖先,則cd運算元是 deep[a]-deep[lca(a,b)]+1

#include#include

#include

#include

using

namespace

std;

const

int max=100009

;const

int m=20

;int head[max],cnt=0

;int

t,n,m;

intup[max][m];

intdis[max];

intdeep[max];

char a[50],b[50

];map

mp;struct

edgeedge[max];

inline

void add(int u,int

v)void dfs(int u) //

dfs遍歷求出深度

}void

init()

int lca(int a,int

b) }

return up[a][0];}

intmain()

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

}init();

intres;

for(int i=0;i)

}return0;

}

HDU 4547 CD操作 (離線Tarjan)

在windows下我們可以通過cmd執行dos的部分功能,其中cd是一條很有意思的命令,通過cd操作,我們可以改變當前目錄。這裡我們簡化一下問題,假設只有乙個根目錄,cd操作也只有兩種方式 1.cd 當前目錄名 目標目錄名 中間可以包含若干目錄,保證目標目錄通過絕對路徑可達 2.cd 返回當前目錄的...

設定cd預設路徑加快cd操作

在使用cd時預設當前工作目錄為相對路徑起點,要切換常用資料夾比較麻煩,最近在閱讀bash原始碼時發現了乙個有趣的環境變數,cdpath,可以更改cd預設的路徑。在linux下,如果我們經常使用cd命令進入某乙個特定目錄下的子目錄,你可以將cdpath設定為該目錄,當使用cd進入其下的子目錄時,直接c...

BZOJ4547 Hdu5171 小奇的集合

給有乙個大小為n的可重集s,每次操作可以加入乙個數a b a,b均屬於s 求k次操作後它可獲得的s的和的最大 值。資料保證這個值為非負數 我們先來看看,因為我們要得到最大的s,所以每次我們都要使得a b最大 首先排除一開始得到的a,b為負數的情況,我們將a b放進s裡,那麼下一次操作就會將a a b...