題解 逃離殭屍島 (洛谷P3393)

2022-08-29 14:51:21 字數 1074 閱讀 5094

有\(n\)個點\(m\)條邊。現有一些點被感染,其餘的點中與被感染的點距離\(\leq s\) 的點是危險的點,點權為\(q\);與所有被感染的點距離\(>s\)的點為安全的點,點權為\(p\)。\(1\)號店與\(n\)號點點權始終為\(0\),求\(1\)號點走到\(n\)號點的最小全值(被感染的點不能走)。

#include #include #include #include #include #define int long long

using namespace std;

const int inf = 1e9 + 7;

const int maxn = 100005;

int n, m, k, s, p, q;

int val[maxn], dis[maxn];

int dan[maxn], dep[maxn], vis[maxn], zomb[maxn];

int edgenum, front[maxn], vet[maxn << 2], nxt[maxn << 2];

queueque;

inline void addedge(int u, int v)

void bfs()

while (!que.empty())

}} //bfs求出所有危險點。

void spfa()

}} }

} //最短路

signed main()

bfs();

for (int i = 1; i <= n; i++)

if (dan[i])

val[i] = q;

else val[i] = p; //賦點權

for (int i = 1; i <= k; i++)

val[zomb[i]] = inf; //這樣就能在跑最短路時不取被感染的點

val[1] = val[n] = 0;

spfa();

printf("%lld\n", dis[n] / 2);

return 0;

}

洛谷 P3393 逃離殭屍島

題目描述 小a住的國家被殭屍侵略了!小a打算逃離到該國唯一的國際空港逃出這個國家。該國有n個城市,城市之間有道路相連。一共有m條雙向道路。保證沒有自環和重邊。k個城市已經被殭屍控制了,如果貿然闖入就會被感染tat 所以不能進入。由其中任意城市經過不超過s條道路就可以到達的別的城市,就是危險城市。換句...

洛谷 P3393 逃離殭屍島

小a住的國家被殭屍侵略了!小a打算逃離到該國唯一的國際空港逃出這個國家。該國有n個城市,城市之間有道路相連。一共有m條雙向道路。保證沒有自環和重邊。k個城市已經被殭屍控制了,如果貿然闖入就會被感染tat.所以不能進入。由其中任意城市經過不超過s條道路就可以到達的別的城市,就是危險城市。換句話說只要某...

洛谷P3393 逃離殭屍島

題目大意 有n個城市m條雙向道路,還有k個已經被殭屍占領的城市,規定 被占領城市不能經過,走不超過s條道路就能到達被占領城市的算危險城市,路費q,其他城市算安全城市,路費p。求從1走到n的最少花費 1和n路費為0 解題思路 我們先跑一遍bfs,求出哪些是危險城市,然後記錄每個城市的路費 貌似int會...