NOIP模擬賽 蟲洞

2022-05-16 06:08:51 字數 1828 閱讀 8894

【題目描述】

n個蟲洞,m條單向躍遷路徑。從乙個蟲洞沿躍遷路徑到另乙個蟲洞需要消耗一定量的燃料和1單位時間。蟲洞有白洞和黑洞之分。設一條躍遷路徑兩端的蟲洞質量差為delta。

1.從白洞躍遷到黑洞,消耗的燃料值減少delta,若該條路徑消耗的燃料值變為負數的話,取為0。

2.從黑洞躍遷到白洞,消耗的燃料值增加delta。

3.路徑兩端均為黑洞或白洞,消耗的燃料值不變化。

作為壓軸題,自然不會是如此簡單的最短路問題,所以每過1單位時間黑洞變為白洞,白洞變為黑洞。在飛行過程中,可以選擇在乙個蟲洞停留1個單位時間,如果當前為白洞,則不消耗燃料,否則消耗s[i]的燃料。現在請你求出從蟲洞1到n最少的燃料消耗,保證一定存在1到n的路線。

【輸入格式】

第1行:2個正整數n,m

第2行:n個整數,第i個為0表示蟲洞i開始時為白洞,1表示黑洞。

第3行:n個整數,第i個數表示蟲洞i的質量w[i]。

第4行:n個整數,第i個數表示在蟲洞i停留消耗的燃料s[i]。

第5..m+4行:每行3個整數,u,v,k,表示在沒有影響的情況下,從蟲洞u到蟲洞v需要消耗燃料k。

【輸出格式】

乙個整數,表示最少的燃料消耗。

【樣例輸入】

4 51 0 1 0

10 10 100 10

5 20 15 10

1 2 30

2 3 40

1 3 20

1 4 200

3 4 200

【樣例輸出】

【資料範圍】

對於30%的資料: 1<=n<=100,1<=m<=500

對於60%的資料: 1<=n<=1000,1<=m<=5000

對於100%的資料: 1<=n<=5000,1<=m<=30000

其中20%的資料為1<=n<=3000的鏈

1<=u,v<=n, 1<=k,w[i],s[i]<=200

【樣例說明】

按照1->3->4的路線。

一開始陣列設小了,wa了兩個點,起碼得設4倍以上

題解:將每個蟲洞拆分為乙個白洞(i)和乙個黑洞(i+n),然後以此建圖,最後按照spfa敲模板就行了

1

#define rep(i,j,k) for(int i=j;i<=k;i++)

23 #include4 #include5 #include6 #include7

using

namespace

std;89

const

int maxn=5001*2;10

const

int inf=0x7f7f7f7f;11

12struct

edge

13e[200000

];16

int node=0

,head[maxn];

1718

intn,m;

19int

w[maxn],p[maxn];

2021

void insert(int u,int v,int

w)22

;24 head[u]=node;25}

2627

intspfa()

2849}50

}51 vis[q]=0;52

}53return min(dist[n],dist[n+n]);54}

5556

intmain()

5768 rep(i,1

,m)69

78else

7983

}84 cout<85return0;

86 }

noip模擬賽 蟲洞

n個蟲洞,m條單向躍遷路徑。從乙個蟲洞沿躍遷路徑到另乙個蟲洞需要消耗一定量的燃料和1單位時間。蟲洞有白洞和黑洞之分。設一條躍遷路徑兩端的蟲洞質量差為delta。1.從白洞躍遷到黑洞,消耗的燃料值減少delta,若該條路徑消耗的燃料值變為負數的話,取為0。2.從黑洞躍遷到白洞,消耗的燃料值增加delt...

簡單介紹BCH蟲洞

原創 url cocowallet url 說起bch,大家都不陌生,它是第乙個btc分叉幣,於2017年8月分叉成功,已穩定執行一年。bch蟲洞,是基於bch的另乙個世界。bch的執行規則不受改變,bch蟲洞基於bch的交易,構建出另一套執行邏輯。我們把bch交易簡單抽象為如下兩個部分資訊 蟲洞的...

noip模擬賽 密碼

表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...