Krito的討伐(bfs加上優先佇列

2021-07-11 05:10:32 字數 1655 閱讀 1505

krito終於乾掉了99層的boss,來到了第100層。第100層可以表示成一顆樹,這棵樹有n個節點(編號從0到n-1),樹上每乙個節點可能有很多只怪物。 krito現在在0號節點,現在它想要區清除這一層所有的怪物。他現在有atk大小的攻擊力。只有當你的攻擊力大於這只怪物的防禦力時,你才可以打敗他,同時每打敗只怪物,你會獲得一定的攻擊力加成。乙個節點可能存在著不止乙隻怪獸,你要打敗這個節點的所有怪物才能可以從這個節點通過,請問他能不能完成這個任務?注意:不要求一次性殺光乙個節點裡面的所有怪物。

第1行:乙個數t,表示有t個測試樣例(0<=t<=50) ,接下來有t個測試樣例

對於每乙個測試樣例:

第1行:兩個整數n,m表示這棵樹有n個節點,m只怪獸(0<=n<=1000 ,0<=m <=100)

第2至n-1行: 兩個整數u,v表示編號為u,v之間的節點有一條無向邊,題目保證不會成環。(0<=u,v第3行: 乙個整數atk,表示krito的初始化攻擊力(0<=atk<=100)

第4至3+m行:兩個整數id,def,add_atk,表示在編號為id的點上,有乙隻防禦力為def的怪物,打敗後可以增加add_atk點的攻擊力。(0<=add_atk,def<=100)

對於每乙個測試樣例,如果krito能夠清除所有的怪物,則輸出「oh yes.」 否則,輸出「good good study,day day up.」

15 20 10 22 32 4113 10 21 11 0

oh yes.

利用有限佇列可以解決此問題

#include #include #include #include #include using namespace std;

const int max_n = 1009;

int n, m, atk;

struct node

};int g[max_n][max_n]; // 鄰接矩陣模擬樹

int cnt[max_n]; // 每個節點上的怪物

vectorv[max_n]; // 每個節點上的全部怪物資訊

bool visit[max_n]; // 標記該點是否訪問過

// 初始化

void init()

// bfs+優先佇列

bool bfs()

; q.push(t);

}visit[0] = true; // 標記根節點已被訪問

while(!q.empty())

; // 如果該點沒有怪物,將def標記為-1

q.push(x);}}

}continue;

}if(atk > t.def)

}else

return false;

}return true;

}int main()

scanf("%d", &atk);

for(int i = 0; i < m; i++)

;v[a].push_back(temp);

cnt[a]++;

}if(bfs())

printf("oh yes.\n");

else

printf("good good study,day day up.\n");

}return 0;

}

zyf的現狀 (BFS 優先佇列)

description zyf對於自己人生的規劃是 健康and快樂。所以他沒有把全部的時間和精力投入到學習中,而是對跑步運動有著狂熱的愛好。經過他的努力,終於加入了運動隊,並且將在下個月代表學校參加省體育聯賽。他所參加的比賽叫做定向越野,是一種新興的運動專案,這項運動的規則 只取其中一種介紹。是 給...

廣度優先演算法的實現(BFS)

include include using namespace std 定義點的結構體 struct temp struct way 地圖 int a 4 5 定義乙個bool型的陣列判斷是否走過這條路 bool b 4 5 vectorv1 用來存放元素 vectorpath 用來存放路徑 int...

廣度優先bfs的python實現

廣度優先排序 bfs 可以一層一層地將圖向外搜尋,以得到離起點最近的元素,這個 最近 在不同情況可以有不同的意義 將下一層所有元素先儲存在同乙個列表中,當把本層元素的內容執行完後再執行.還是以這張圖為例 當從s開始廣度優先搜尋時 第1層 s 第2層 a,d 第3層 b,c 第4層 t 依次執行這些列...