2019 10 29 CSP 您賽第四場t2

2022-05-08 20:03:12 字數 2522 閱讀 8989

我太菜了我竟然不會分層圖最短路

【題目描述】

\(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的值,希望你...