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 依次執行這些列...