FJOI2014 最短路徑樹問題

2022-09-02 15:15:17 字數 551 閱讀 3695

這題已經在我的收藏夾裡吃了大半年的灰了……主要是因為他們有人把這題歸到了樹形dp裡面,然後我就傻乎乎地把它收藏了……

首先,假設我們已經求出了這個「最短路徑樹」,剩下的就是點分治的板子了。

而這個「最短路徑樹」,首先可以通過dijkstra跑出最短路徑dag,然後在dag上用bfs即可求出字典序最小的樹。

總的來說似乎是把兩道板子強行縫在了一起?老縫合怪了

**:

#includeusing namespace std;

int n,m,p;

namespace cdedge[60010];

void ae(int u,int v,int w)

bool vis[30100];

void getsz(int x,int fa)

void getroot(int x,int fa)

// for(int i=1;i<=n;i++)printf("%d ",dis[i]);puts("");

} void build() }}

int main()

FJOI2014最短路徑樹問題

給乙個包含n個點,m條邊的無向連通圖。從頂點1出發,往其餘所有點分別走一次並返回。往某乙個點走時,選擇總長度最短的路徑走。若有多條長度最短的路徑,則選擇經過的頂點序列字典序最小的那條路徑 如路徑a為1,32,11,路徑b為1,3,2,11,路徑b字典序較小。注意是序列的字典序的最小,而非路徑中節點編...

FJOI2014 最短路徑樹問題

here 吐槽一下這個題,完全就是兩個裸題拼一起了,而且兩個板子之間毫無聯絡 首先我們造乙個保證字典序最小的最短路徑樹,怎麼保證字典序呢,先將你存的圖按字典序從小到大重新排個序再跑最短路就行了。之後就是 跑 dijkstra dfs 一遍重新建圖,如果 u 已經被訪問過,那麼邊 e 在最短路上的當且...

樹的分治 FJOI2014最短路徑樹問題

題目大意 給乙個包含n個點,m條邊的無向連通圖。從頂點1出發,往其餘所有點分別走一次並返回。往某乙個點走時,選擇總長度最短的路徑走。若有多條長度最短的路徑,則選擇經過的頂點序列字典序最小的那條路徑 如路徑a為1,32,11,路徑b為1,3,2,11,路徑b字典序較小。注意是序列的字典序的最小,而非路...