傳送門 解題報告

2022-04-29 21:18:09 字數 1494 閱讀 1163

給乙個無重邊無自環的帶正權無向圖\(g\)和點\(s,t\),已知\(g\)中某邊斷掉了,但只有走到邊兩端點處才知道邊是否斷掉,採取最優策略,求\(s\)到\(t\)的最短路的最壞情況

考慮一下最優策略咋做出來

這個就和九省聯考2018一雙木棋有點類似,考慮從終止態逆推,因為靠後的狀態我們很容易知道它的最優策略,比如直接相連t的點的最優策略就很顯然。

然後我們發現,對每個點到\(t\)的最優策略都是可以通過它出邊的點轉移過來的。

但是還有乙個問題,轉移的方向,會不會成乙個環?

注意到是乙個正權圖的轉移,顯然乙個點轉移到另乙個點,權值不會變小,所以按照dijkstra那樣轉移就是對的

那麼具體到底怎麼轉移呢?

考慮\(u\)到\(v\)的轉移

\[dp_v=\min_u \,g_)\}

\]\(g_\)表示\(u\)到\(v\)這個邊不能走以後的\(u\)到\(t\)的最短路,現在只需要求出這個\(g\)就可以了

考慮建出\(t\)的最短路樹

那麼如果\(u\)不是\(v\)樹上的兒子,那麼走樹邊上去就可以了

否則先走到\(u\)子樹上一點\(v\),然後通過乙個非樹邊從\(v\)走到子樹外\(w\),然後再走樹邊上去,設到根t的距離為\(dis_i\),那麼這個需要最小化\(dis_v+e(v,w)+dis_w-dis_u\)

那麼我們可以離線的去做,對子樹維護乙個最小值,做啟發式合併,就可以處理出\(g\)了

總複雜度\(o(n\log n)\)

code:

#include #include #include #include #include #include #define ll long long

using std::max;

const int n=4e5+10;

const ll inf=1e16;

template void read(t &x)

int head[n],to[n<<1],next[n<<1],cnt=1;ll edge[n<<1];

void add(int u,int v,ll w)

int n,m,s,t;

struct node

node(int v,ll w)

bool friend operator <(node a,node b)

};std::priority_queue q;

int vis[n],pre[n];

ll dis[n];

void dijs()

}}std::vectore[n];

int dfn[n],low[n],par[n],dfsclock;

void dfs0(int now)

{ dfn[now]=++dfsclock;

for(int i=0;idat[y]) std::swap(x,y);

rs=merge(rs,y);

if(dep[ls]2019.3.22

解鎖 傳送門

linenoise c命令列處理工具 catch2 c 測試框架 quick start linenoise ng linenoise next generation c 命令列處理工具 yarn 快速 可靠 安全的node包依賴管理工具 pandoc pandoc安裝 使用 快速上手 autope...

JZOJ A組 傳送門

8102年,normalgod在glados的幫助下,研製出了傳送槍。但glados想把傳送槍據為己有,於是把normalgod扔進了一間實驗室。這間實驗室是一棵有n個節點的樹。現在normalgod在一號節點,出口也在一號節點,但為了開啟它,必須經過每乙個節點按下每個節點的開關,出口才能開啟。gl...

資料集傳送門

描述 flickr30k 多標籤定義影象 esp game 多標籤定義影象 iaprtc 12 多標籤定義影象 nus wide 視覺關係檢測 vrd 視覺關係檢測 svg 影象屬性檢測 visual genome dataset 關於rgbd 影象場景理解的資料庫 nyu depth v2 dat...