D Buy a Ticket 超級源點 最短路

2021-10-04 15:12:57 字數 1467 閱讀 6043

題意:

給定一張帶權圖,每個點都有權值ai。對於每個點i,找到乙個j,使得2*dis(i,j)+aj的值最小。

2 ≤n

≤2⋅1

05,1

≤m≤2

⋅105

,1≤v

i,ui

≤n,v

i≠ui

,1≤w

i≤10

12,1≤

ai≤1

012

2 ≤ n ≤ 2·10^5, 1 ≤ m ≤ 2·10^5,1 ≤ v_i, u_i ≤ n, v_i ≠ u_i, 1 ≤ w_i ≤ 10^,1 ≤ a_i ≤ 10^

2≤n≤2⋅

105,

1≤m≤

2⋅10

5,1≤

vi​,

ui​≤

n,vi

​​=

ui​,

1≤wi

​≤10

12,1

≤ai​

≤101

2 分析:在圖上有多個點滿足條件的其實就可以往超級源點上面想。我們思考對於乙個點i,找任意的j,那麼我們把所有的j都整合到超級源點上,超級源點與他們連的邊權是多少呢,因為要代價最後要加上點權,所以這個邊權就是他們的點權。那麼i的答案就是i到超級源點的最短路,所以要求每乙個i,就是求超級源點到所有點的最短距離,dijstra即可。

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

ll dist[

200005

],v[

200005];

int vis[

200005];

struct node

bool

operator

<

(const node&n)

const};

vector g[

200005];

void

dij(

int begin,

int n)

dist[begin]=0

;

q.push

(node

(begin,0)

);//把開始節點入隊

while

(!q.

empty()

)//while到隊列為空}}

}int

main()

for(

int i =

1; i <= n; i++

)dij(0

,n);

for(

int i =

1; i <= n; i++

)return0;

}

tyvj2032 超級源點)

開啟了公升降梯的動力之後,探險隊員們進入了公升降梯執行的那條豎直的隧道,映入眼簾的是一條直通塔頂的軌道 一輛停在軌道底部的電梯 和電梯內一桿控制電梯公升降的巨大手柄。nescafe 之塔一共有n 層,公升降梯在每層都有乙個停靠點。手柄有m個控制槽,第i 個控制槽旁邊標著乙個數ci,滿足c10,表示手...

加超級源點的Kruskal演算法

東東在老家農村無聊,想種田。農田有 n 塊,編號從 1 n。種田要灌氵 眾所周知東東是乙個魔法師,他可以消耗一定的 mp 在一塊田上施展魔法,使得黃河之水天上來。他也可以消耗一定的 mp 在兩塊田的渠上建立傳送門,使得這塊田引用那塊有水的田的水。1 n 3e2 黃河之水天上來的消耗是 wi,i 是農...

FZYZOJ 下片 題解(最短路 超級源點)

第一行n,m,表示總格有n個點,m條網路連線 接下來m行,表示每條網路連線所連線的a b點和線的長度。接下來乙個數t1,表示uoi有多少臺電腦。下一行t1個數,表示uoi每台電腦的編號。接下來乙個數t2,表示有多少臺伺服器。下一行t2個數,表示每台伺服器編號。題意轉化 給你一些源點和一些匯點,求一條...