BZOJ1927星際競速

2021-07-10 18:49:44 字數 2232 閱讀 2593

1927: [sdoi2010]星際競速

time limit: 20 sec memory limit: 259 mb

submit: 1727 solved: 1053

description

10 年一度的銀河系賽車大賽又要開始了。作為全銀河最盛大的活動之一, 奪得這個專案的冠軍無疑是很多人的夢想,來自傑森座 α星的悠悠也是其中之一。 賽車大賽的賽場由 n 顆行星和m條雙向星際航路構成,其中每顆行星都有 乙個不同的引力值。大賽要求車手們從一顆與這 n 顆行星之間沒有任何航路的 天體出發,訪問這 n 顆行星每顆恰好一次,首先完成這一目標的人獲得勝利。 由於賽制非常開放,很多人駕駛著千奇百怪的自製賽車來參賽。這次悠悠駕 駛的賽車名為超能電驢,這是一部凝聚了全銀河最尖端科技結晶的夢幻賽車。作 為最高科技的產物,超能電驢有兩種移動模式:高速航行模式和能力爆發模式。 在高速航行模式下,超能電驢會展開反物質引擎,以數倍於光速的速度沿星際航 路高速航行。在能力爆發模式下,超能電驢脫離時空的束縛,使用超能力進行空 間跳躍——在經過一段時間的定位之後,它能瞬間移動到任意乙個行星。 天不遂人願,在比賽的前一天,超能電驢在一場離子風暴中不幸受損,機能 出現了一些障礙:在使用高速航行模式的時候,只能由每個星球飛往引力比它大 的星球,否則賽車就會發生**。 儘管心愛的賽車出了問題,但是悠悠仍然堅信自己可以取得勝利。他找到了 全銀河最聰明的賢者——你,請你為他安排一條比賽的方案,使得他能夠用最少 的時間完成比賽。

input

第一行是兩個正整數 n, m。 第二行 n 個數 a1~an, 其中ai表示使用能力爆發模式到達行星 i 所需的定位 時間。 接下來 m行,每行 3個正整數ui, vi, wi,表示在編號為 ui和vi的行星之間存 在一條需要航行wi時間的星際航路。 輸入資料已經按引力值排序,也就是編號小的行星引力值一定小,且不會有 兩顆行星引力值相同。

output

僅包含乙個正整數,表示完成比賽所需的最少時間。

sample input

3 3

1 100 100

2 1 10

1 3 1

2 3 1

sample output

12 hint

說明:先使用能力爆發模式到行星 1,花費時間 1。

然後切換到高速航行模式,航行到行星 2,花費時間10。

之後繼續航行到行星 3完成比賽,花費時間 1。

雖然看起來從行星 1到行星3再到行星 2更優,但我們卻不能那樣做,因為

那會導致超能電驢**。

對於 30%的資料 n≤20,m≤50;

對於 70%的資料 n≤200,m≤4000;

對於100%的資料n≤800, m≤15000。輸入資料中的任何數都不會超過106。

輸入資料保證任意兩顆行星之間至多存在一條航道,且不會存在某顆行星到

自己的航道。

source

第一輪day2

最小費用最大流+拆點建圖

把每個點拆成兩個點,分別為入度點和出度點,因為要每個點都走一遍,所以源點向入度點連邊,流量為1,費用為ai,源點向出度點連邊,流量為1,費用為0,出度點向入度點連邊,且編號小的點連向大的,流量為1,費用為cost,入度點向匯點連邊,流量為1,費用為0.

附上本蒟蒻的**:

#include

#include

#include

using namespace std;

#define inf 0x7fffffff

int n,m,t,h[100010],dis[100010],q[100010],head,tail,cnt=1,ans,sum;

bool mark[100010],vis[100010];

struct kx

edge[100010];

intread()

while (ch>='0' && ch<='9')

w=w*10+ch-'0',ch=getchar();

return w*f;

}void add(int u,int v,int w,int cost)

bool spfa()

}return dis[0]!=inf;

}int dfs(int

x,int f)

return used;

}int main()

while (spfa())

}printf("%d",ans);

return

0;}

bzoj1927 星際競速

考慮沒有爆發,那麼相當於是帶權最小不可交路徑覆蓋,由於只能從編號小的到編號大的,因此一定是dag,而dag的最小路徑覆蓋可以拆點並跑最大流,那麼帶權的只需要跑費用流即可 s向i連 1,0 的邊,i 向t連 1,0 的邊,i向j 連 1,t 的邊,其中i j有時間為t的邊 考慮爆發操作,相當於讓任意兩...

bzoj 1927 星際競速(拆點費用流)

題目鏈結 好嘛,現在我要正式用某神犇的部落格上的題的順序開始刷題了。這道題將每個能力爆發模式的費用,即單點費用拆成兩個點,再加邊。要加入乙個源點和匯點。本蒟蒻只會寫有點耗時的spfa版,若有那個神犇會zkw費用流,請教一下 include include include includeusing n...

bzoj1927 Sdoi2010 星際競速

傳送門 思路 拆點拆成x和x s向x 連邊,容量為1,費用為定位時間 s向x連邊,容量為1,費用為0 對於原圖的邊u v u向v 連邊,容量為1,費用為時間 x 向t連邊,容量為1,費用為0 跑一遍費用流即可 include include include includeconst int maxn...