這題已經在我的收藏夾裡吃了大半年的灰了……主要是因為他們有人把這題歸到了樹形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字典序較小。注意是序列的字典序的最小,而非路...