SDOI2010 星際競速

2022-05-10 21:54:13 字數 2696 閱讀 1425

10年一度的銀河系賽車大賽又要開始了。作為全銀河最盛大的活動之一,奪得這個專案的冠軍無疑是很多人的夢想,來自傑森座α星的悠悠也是其中之一。

賽車大賽的賽場由n顆行星和m條雙向星際航路構成,其中每顆行星都有乙個不同的引力值。大賽要求車手們從一顆與這n顆行星之間沒有任何航路的天體出發,訪問這n顆行星每顆恰好一次,首先完成這一目標的人獲得勝利。

由於賽制非常開放,很多人駕駛著千奇百怪的自製賽車來參賽。這次悠悠駕駛的賽車名為超能電驢,這是一部凝聚了全銀河最尖端科技結晶的夢幻賽車。作為最高科技的產物,超能電驢有兩種移動模式:高速航行模式和能力爆發模式。在高速航行模式下,超能電驢會展開反物質引擎,以數倍於光速的速度沿星際航路高速航行。在能力爆發模式下,超能電驢脫離時空的束縛,使用超能力進行空間跳躍——在經過一段時間的定位之後,它能瞬間移動到任意乙個行星。

天不遂人願,在比賽的前一天,超能電驢在一場離子風暴中不幸受損,機能出現了一些障礙:在使用高速航行模式的時候,只能由每個星球飛往引力比它大的星球,否則賽車就會發生**。

儘管心愛的賽車出了問題,但是悠悠仍然堅信自己可以取得勝利。他找到了全銀河最聰明的賢者——你,請你為他安排一條比賽的方案,使得他能夠用最少的時間完成比賽。

輸入格式:

輸入檔案starrace.in的第一行是兩個正整數n, m。

第二行n個數a1~an,其中ai表示使用能力爆發模式到達行星i所需的定位時間。

接下來m行,每行3個正整數ui, vi, wi,表示在編號為ui和vi的行星之間存在一條需要航行wi時間的星際航路。

輸入資料已經按引力值排序,也就是編號小的行星引力值一定小,且不會有兩顆行星引力值相同。

輸出格式:

輸出檔案starrace.out僅包含乙個正整數,表示完成比賽所需的最少時間。

輸入樣例#1:複製

3 3

1 100 100

2 1 10

1 3 1

2 3 1

輸出樣例#1:複製

12

輸入樣例#2:複製

3 3

1 2 3

1 2 100

1 3 100

2 3 100

輸出樣例#2:複製

6

輸入樣例#3:複製

4 5

100 1000 10 100

1 2 100

2 3 100

4 3 100

1 3 20

2 4 20

輸出樣例#3:複製

230

樣例一說明:先使用能力爆發模式到行星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。

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

本題有2種建模方式

1.簡單的費用流:(c,w)表示流量為c,邊權為w

每個點拆成2個u和u'

於是考慮限制,每個點經過一次,即最多一次連入一次連出

將u'與t連一條(1,0)保證u只連通一次

s向u連(1,0)邊

要使空間跳躍能使這點無法再經過,考慮s向u'連一條(1,a[u])

還要使u->v滿足條件,考慮u與v'建一條(1,w)邊

2.有上下界無源匯最小費用迴圈流(難度高但快一些)

具體見傳送門

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8struct

node

9edge[120001

];12

int num=1,head[2001],s,t,dist[2001],inf=1e9,vis[2001],path[2001],ans,flow,n,m,a[2001

];13

void add(int u,int v,int cap,int

w)14

23bool

spfa()

24 47}48

}49}50

if (dist[t]==inf) return0;

51return1;

52}53int

mincost()

54 62

for (i=path[t];i!=-1;i=path[edge[i].u])

6367 ans+=minf*dist[t];

68 flow+=minf;69}

70return

ans;71}

72int

main()

73 87

for (i=1;i<=m;i++)

8894 cout<95 }

SDOI2010 星際競速

10年一度的銀河系賽車大賽又要開始了。作為全銀河最盛大的活動之一,奪得這個專案的冠軍無疑是很多人的夢想,來自傑森座 星的悠悠也是其中之一。賽車大賽的賽場由n顆行星和m條雙向星際航路構成,其中每顆行星都有乙個不同的引力值。大賽要求車手們從一顆與這n顆行星之間沒有任何航路的天體出發,訪問這n顆行星每顆恰...

SDOI2010 星際競速

昨天連續做了兩道網路流 這是第一道 這是道圖論題是肯定的,圖都給你了 那麼問題在於如何建模 問題要求訪問每個點恰好一次 我一開始沒看到這個條件 要求總時間最短,嘗試把問題轉化為一些經典圖論問題比如最短路 很可惜不行,那麼自然想到網路流 組裡面有句戲言叫 一切皆可網路流 比如a b 進一步分析發現單純...

SDOI2010 星際競速

題解 感覺非常智障。我還仔細看了一下題目這是不是顆樹,然後發現給了邊數 然後就沒往這想了 只能從小到大 顯然的dag性質啊。然後就很簡單了啊。考慮二分圖里最小路徑覆蓋 這題裡,其實也就是找一些路徑,使其覆蓋所有點 這題無非就是增加了費用限制 所以就變成跑最小費用最大流就好了 但是注意到飛躍到每個點是...