我太菜了我竟然不會分層圖最短路
【題目描述】
\(cxm\) 在 \(ns\) 星系迷路了,情急之下,他找到了你。現在,解救 \(cxm\) 的重任就落在了
你的肩上了。
\(ns\) 星系有 \(n\) 顆星球,編號為 \(1\) 到 \(n\) 的整數。星球之間由 \(m\) 條單向的時空隧道相
連。經過每個時空隧道要花費一定的時間。\(cxm\) 的飛船最多可以儲存 \(max\)
\(\_\)
\(energy\) 的能
量,經過有些時空隧道會損失能量,而其他的會增加能量。飛船不能通過損失能量數超
過當前能量或者增加能量後飛船能量超過 \(max\_energy\) 的時空隧道。
現在,\(cxm\) 的飛船在編號為 \(1\) 的星球,飛船剩餘的能量為 \(max\_energy\) 的一半。你
需要計算出到編號為 \(n\) 的星球的最短時間。
【輸入格式】
從檔案 \(star.in\) 中讀入資料。
第一行三個正整數 \(n,m\) 和 \(max\_energy\)。
接下來 \(m\) 行,每行 \(3\) 個正整數 \(u,v,time\) 和 \(1\) 個整數 \(energy\)。表示從編號為 \(u\) 的星
球到編號為 \(v\) 的星球有一條時空隧道,經過這個隧道花費的時間為 \(time\)。如果 \(energy\)
為正數,則表示通過會增加 \(energy\) 的能量,否則表示通過會損失 \(−energy\) 的能量。保
證,\(1\leq u,v\leq n,1\leq time\leq 10^4 ,−100\leq energy\leq 100\)。
每行兩個數之間均用空格隔開。
【輸出格式】
輸出到檔案 \(star.out\) 中。
輸出一行,乙個正整數,表示到達的最短時間。資料保證有解。
【樣例輸入】
4 6 4
1 4 100 0
1 2 5 -1
2 3 3 2
3 2 1 -1
3 4 5 -4
3 4 10 -3
【樣例輸出】
17【子任務】
每個測試點的資料規模如下
測試點\(n=\)
\(m=\)
\(max\_energy\)
資料特點
\(1\)
\(5\)
\(11\)
\(4\)
無特殊性質
\(2\)
\(8\)
\(16\)
\(4\)
無特殊性質
\(3\)
\(10\)
\(21\)
\(6\)
無特殊性質
\(4,5,6\)
\(50\)
\(2000\)
\(10^2\)
所有的\(energy\)均為正
\(7,8,9,10\)
\(50\)
\(2000\)
\(50\)
無特殊性質
容易想到最短路。但是因為有\(energy\)限制的存在,所以不能跑簡單的最短路。
我記得有過乙個\(oidalao\)講過一句話。
——如果dp不知道乙個狀態怎麼存,就再加一維。
所以對於正常的一維\(spfa\)我們將它加一維,表示當前的能量是多少。最後列舉所有可能的終點能量值即可。
上**:
#include#include#include#include#include#include#include#define rep(i,a,n) for(int i=a;i<=n;i++)
#define dep(i,n,a) for(int i=n;i>=a;i--)
#define int long long
using namespace std;
queue> q;
int n,m,max_energy,dis[55][155],inq[55][55],ans,num,head[55];
struct edge
e[100050];
inline int read()
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}void add(int u,int v,int t,int en)
signed main()
q.push(make_pair(1,max_energy/2));
ans=dis[0][0];
dis[1][max_energy/2]=0;
inq[1][max_energy/2]=1;
while(!q.empty())
}} }
rep(i,0,max_energy)
ans=min(ans,dis[n][i]);
printf("%lld",ans);
return 0;
}
CSP認證2019 03 的第四題
訊息傳遞視窗 最近在刷csp認證2019年三月份的第四題,主體思路是開n個佇列,分別去維護n個程序,之前的想法是直接暴力,去判斷這n個佇列的隊首元素是否匹配,本以為沒有問題。但是出現了玄學錯誤,官網測試上報的是超時。經後面發現是讀入掛了。附上原來的讀入程式 cin t n getchar while...
12 9周賽第四題
time limit1000 ms memory limit32768 kb 給定三條邊,請你判斷一下能不能組成乙個三角形。輸入資料第一行包含乙個數m,接下有m行,每行乙個例項,包含三個正數a,b,c。其中a,b,c 1000 對於每個測試例項,如果三條邊長a,b,c能組成三角形的話,輸出yes,否...
2020 02 29模擬賽11(第四題)
題目描述 4和7是味味的幸運數字。幸運數是那些只由幸運數字組成的正整數。如47,477是幸運數,而5,17,417 就不是幸運數。定義next x 為大於或等於x的最小的幸運數。味味對以下表示式的值很感興趣 next l next l 1 next r 1 next r 現在告訴你l和r的值,希望你...