time limit: 1 second
memory limit: 128 mb
巫妖王的天災軍團終於捲土重來,血色十字軍組織了一支先鋒軍前往諾森德大陸對抗天災軍團,以及一切沾有亡靈氣息的生物。孤立於聯盟和部落的血色先鋒軍很快就遭到了天災軍團的重重包圍,現在他們將主力只好聚集了起來,以抵抗天災軍團的圍剿。可怕的是,他們之中有人感染上了亡靈瘟疫,如果不設法阻止瘟疫的擴散,很快就會遭到滅頂之災。大領主阿比迪斯已經開始調查瘟疫的源頭。原來是血色先鋒軍的內部出現了叛徒,這個叛徒已經投靠了天災軍團,想要將整個血色先鋒軍全部轉化為天災軍團!無需驚訝,你就是那個叛徒。在你的行蹤敗露之前,要盡快完成巫妖王交給你的任務。
軍團是乙個n行m列的矩陣,每個單元是乙個血色先鋒軍的成員。感染瘟疫的人,每過乙個小時,就會向四周擴散瘟疫,直到所有人全部感染上瘟疫。你已經掌握了感染源的位置,任務是算出血色先鋒軍的領主們感染瘟疫的時間,並且將它報告給巫妖王,以便對血色先鋒軍進行一輪有針對性的圍剿。
第1行:四個整數n,m,a,b,表示軍團矩陣有n行m列。有a個感染源,b為血色敢死隊中領主的數量。 接下來a行:每行有兩個整數x,y,表示感染源在第x行第y列。 接下來b行:每行有兩個整數x,y,表示領主的位置在第x行第y列。
第1至b行:每行乙個整數,表示這個領主感染瘟疫的時間,輸出順序與輸入順序一致。如果某個人的位置在感染源,那麼他感染瘟疫的時間為0。
1<=m,n<=500 1<=a,b<=m*n
5 4 2 31 15 4
3 35 3
2 4
313
如下圖,標記出了所有人感染瘟疫的時間以及感染源和領主的位置。【題解】
這樣做:從每個感染點開始進行廣搜,嘗試更新到其他點的最短路徑。然後輸入乙個感染點。dis[x][y]=0
因為0肯定是最優的。然後從這個點往外走。看看能不能更新其他點的最短路。
二維的最短路。代價就是步驟數+1.恩。很像spfa。
然後對於每乙個詢問。直接輸出dis[x][y]即可。
【**】
#include #include const int dx[5] = ;//為了往4個方向走而定義的陣列。
const int dy[5] = ;
int n, m, a, b,dis[501][501],dl[250001+100][2];
void bfs(int x, int y)//從(x,y)開始往外廣搜。
} }}void input_data()
for (int i = 1; i <= b; i++)//對於詢問直接輸出答案就可以啦。 }
int main()
u007 血色先鋒隊
time limit 1 second memory limit 128 mb 巫妖王的天災軍團終於捲土重來,血色十字軍組織了一支先鋒軍前往諾森德大陸對抗天災軍團,以及一切沾有亡靈氣息的生物。孤立於聯盟和部落的血色先鋒軍很快就遭到了天災軍團的重重包圍,現在他們將主力只好聚集了起來,以抵抗天災軍團的圍...
血色先鋒隊 BFS
給出 k k 個起始點和 t role presentation t t個結束點,求每個結束點距離任意乙個起始點的最短馬哈頓距離。in put inp ut 5 4 2 3 1 15 4 3 35 3 2 4ou tput o ut pu t3 13裸的bf s bfs 讀入每個起始點的位置後就可以...
血色先鋒隊題解
手動分割 這是此題的標準解法。先將給定的a個感染源入隊,並將其所在格的感染時間設為0。先將a個感染源所在的結點入隊 for i 0 i 依次將佇列中的每個點作為父結點,嘗試將每個父結點的4個方向的子結點入隊。for i 0 i 4 i 嘗試將每個父結點的4個方向的子結點入隊 此處為省略的 在嘗試將結...