時間限制: 1 sec 記憶體限制: 128 mb
提交: 67 解決: 24
[提交][狀態][討論版]
小l的家鄉最近遭遇了一場洪水,城市變得面目全非,道路也都被沖毀了。生活還要繼續,於是市**決定重建城市中的道路。
在洪水到來前,城市中共有n個區域和m條連線這些區域的雙向道路,
道路連通了所有的區域,為了方便人們的出行,只能重建這些原有的道路, 不能建新的道路。編號為s的區域是市政廣場,市**希望重建的道路能夠
使得所有區域到市政廣場的最短路與受災前保持不變,同時為了節約救災 經費,還要使得修建的所有道路的長度和盡可能小。
小l為了拯救心愛的家鄉,決定站出來,成為優秀的青年理論計算機科 學家,於是馬上投入到了對這個問題的研究中。你能幫幫小l嗎?
第一行兩個整數n和m,表示區域與道路的個數。
接下來m行,每行三個正整數u,v和w,描述一條連線u和v、長為w的道路。
最後一行,乙個正整數s,表示市政廣場的編號。
輸出乙個整數,表示最小長度和。
5 71 2 1
2 3 4
2 4 2
4 3 2
5 2 2
4 5 1
5 1 1
2
6最優方案是重建1-2,1-5,2-4,4-3的道路,此時所有區域到達區域2的最短路分別是1, 0, 4, 2, 2,道路長度和是1 + 1 + 2 + 2 = 6。
對於20%的資料,n ≤ 10, m ≤ 20;
對於另外30%的資料,邊權不超過2;
對於100%的資料,1 ≤ n ≤ 105, n − 1 ≤ m ≤ 2 ∗ 105, 1 ≤ w ≤ 109。
**如下:
#include#include#include
#include
#include
#define ll long long
using
namespace
std;
const
int inf=1e9+7;
const
int maxn=1e6+5
;struct
edgeedge[maxn];
inthead[maxn],vis[maxn],pre[maxn],cnt,n,m;
ll dis[maxn];
void add(int u,int v,intw)
void spfa(int
s)
else
}dis[v]=dis[u]+w;
if(!vis[v])}}
}printf(
"%lld\n
",ans);}
intmain()
scanf("%d
",&st);
spfa(st);
return0;
}
2018 山東冬令營 中國石油 劃分
時間限制 1 sec 記憶體限制 128 mb 提交 18 解決 6 提交 狀態 討論版 給出n個不超過m的非負整數,將數劃分成兩個集合,記為1號集合和2號集合。x1為1號集合中所有數的異或和,x2為2號集合中所有數的異或和。在最大化x1 x2的前提下,最小化x1。第一行n 第二行n個非負整數 一行...
位元組跳動冬令營2018
給定一棵有根樹,邊有邊權,兩個人輪流操作,每次可以把一條邊的權值減少一,權值變為 0 表示把子樹砍掉,問先手第一輪操作哪些邊使得自己必勝。n 1 06 n leq 10 6 n 10 6之前的部落格,發現這道題本質上是圖的刪邊遊戲。把環縮掉,就變成了樹上刪邊遊戲了。結論是 葉子的 sg 為 0,非葉...
2018北京冬令營測試
題面戳我!我們發現 所有數加起來等於線索上的權值 這個東西可以用流量平衡來解決,所以可以跑上下界費用流。建圖就是,把上下線索放左邊,左右線索放右邊,源點向所有上下線索連乙個上下界均為對應權值的邊,同理左右線索向匯點連乙個上下界均為對應權值的邊 對於空格就是把左邊的乙個節點和右邊的乙個節點連起來,上下...