【題目描述】
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在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...