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。
輸出格式:
乙個整數,表示最少的燃料消耗。
輸入樣例#1:
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
輸出樣例#1:
130
對於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的路線。
分析:本質上就是最短路問題,乙個點具有兩個性質,一般而言都要拆成兩個具有不同性質的點,這兩個點根據題目說的白變黑,黑變白來連邊,然後繼續連邊,跑一邊規模為2*n的spfa就過了。第一次做沒看清題目,每次跑過蟲洞都要消耗1單位時間......
#include #include#include
#include
#include
#include
using
namespace
std;
const
int maxn = 501000,maxm = 10001000,inf = 0x7ffffff
;int n,m,flag[maxn],to[maxm],nextt[maxm],tot = 1
,head[maxn],mg[maxn],s[maxn];
intd[maxn],vis[maxn],w[maxn];
//1 ~ n為白,n + 1 ~ 2n為黑
void add(int x,int y,int
z)void spfa(int
s) }}}
}int
main()
else
}for (int i = 1; i <= n; i++)
if (flag[1
]) spfa(
1 +n);
else
spfa(1);
printf(
"%d\n
", min(d[n],d[2 *n]));
return0;
}
NOIP模擬賽 蟲洞
題目描述 n個蟲洞,m條單向躍遷路徑。從乙個蟲洞沿躍遷路徑到另乙個蟲洞需要消耗一定量的燃料和1單位時間。蟲洞有白洞和黑洞之分。設一條躍遷路徑兩端的蟲洞質量差為delta。1.從白洞躍遷到黑洞,消耗的燃料值減少delta,若該條路徑消耗的燃料值變為負數的話,取為0。2.從黑洞躍遷到白洞,消耗的燃料值增...
簡單介紹BCH蟲洞
原創 url cocowallet url 說起bch,大家都不陌生,它是第乙個btc分叉幣,於2017年8月分叉成功,已穩定執行一年。bch蟲洞,是基於bch的另乙個世界。bch的執行規則不受改變,bch蟲洞基於bch的交易,構建出另一套執行邏輯。我們把bch交易簡單抽象為如下兩個部分資訊 蟲洞的...
noip模擬賽 密碼
表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...