GDUT Krito的讨伐(bfs&&优先队列)
题意
Description
Krito最终干掉了99层的boss,来到了第100层。
第100层能够表示成一颗树。这棵树有n个节点(编号从0到n-1),树上每个节点可能有非常多仅仅怪物。 Krito如今在0号节点,如今它想要区清除这一层全部的怪物。他如今有atk大小的攻击力。
仅仅有当你的攻击力大于这仅仅怪物的防御力时,你才干够打败他。同一时候每打败仅仅怪物,你会获得一定的攻击力加成。一个节点可能存在着不止一仅仅怪兽,你要打败这个节点的全部怪物才干能够从这个节点通过,请问他能不能完毕这个任务?注意:不要求一次性杀光一个节点里面的全部怪物。
Input
第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<n , u!=v)
>第3行: 一个整数atk,表示Krito的初始化攻击力(0<=atk<=100)
第4至3+m行:两个整数id,def。add_atk,表示在编号为id的点上,有一仅仅防御力为def的怪物,打败后能够添加add_atk点的攻击力。(0<=add_atk,def<=100)
Output
对于每个測试例子。假设Krito能够清除全部的怪物,则输出“Oh yes.” 否则。输出“Good Good Study,Day Day Up.”
Sample Input
1
5 2
0 1
0 2
2 3
2 4
11
3 10 2
1 11 0
Sample Output
Oh yes.
思路
由于从根节点開始,必须打败当前节点的全部怪物,才干够进入下一节点。贪心思想,先选择防御力低的怪物总是不会更坏。
所以用一优先队列维护我们能够攻击到到怪物,一旦某节点怪物全杀完,则将其子节点怪物添加队列。
假设当前最小防御力怪物都不能消灭。那么一定是失败的。
代码
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;
#define LL long long
struct Node
{
int id, def, add;
friend bool operator < (Node a, Node b)
{
return a.def > b.def;
}
};
bool g[1009][1009];
int cnt[1009];
vector<Node > v[1009];
bool vis[1009];
int n, m, k;
void init()
{
memset(cnt, 0, sizeof(cnt));
memset(g, 0, sizeof(g));
memset(vis, 0, sizeof(vis));
for(int i=0; i<n; i++)
v[i].clear();
}
bool bfs()
{
priority_queue<Node> q;
for(int i=0; i<v[0].size(); i++)
q.push(v[0][i]);
if(cnt[0] == 0)
{
Node t = {0, -1, 0};
q.push(t);
}
vis[0] = 1;
while(!q.empty())
{
Node t = q.top();
q.pop();
if(t.def == -1)
{
for(int i=0; i<n; i++)
{
if(!vis[i] && g[t.id][i] == 1)
{
vis[i] = 1;
for(int j=0; j<cnt[i]; j++)
q.push(v[i][j]);
if(cnt[i] == 0)
{
Node x = {i, -1, 0};
q.push(x);
}
}
}
continue;
}
if(t.def < k)
{
k += t.add;
if(--cnt[t.id] == 0)
{
t.def = -1;
q.push(t);
}
}
else
return false;
}
return true;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
init();
scanf("%d%d", &n, &m);
for(int i=1; i<n; i++)
{
int a, b;
scanf("%d%d", &a, &b);
g[a][b] = g[b][a] = 1;
}
scanf("%d", &k);
for(int i=0; i<m; i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
Node t={a, b, c};
v[a].push_back(t);
cnt[a]++;
}
if(bfs())
printf("Oh yes.\n");
else
printf("Good Good Study,Day Day Up.\n");
}
return 0;
}
GDUT Krito的讨伐(bfs&&优先队列)的更多相关文章
- GDUT——1169: Krito的讨伐(优先队列BFS)
1169: Krito的讨伐 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 619 Solved: 102 Description Krito终于干 ...
- 广东工业大学2016校赛决赛-网络赛 1169 Problem A: Krito的讨伐 优先队列
Problem A: Krito的讨伐 Description Krito终于干掉了99层的boss,来到了第100层.第100层可以表示成一颗树,这棵树有n个节点(编号从0到n-1),树上每一个节点 ...
- hdu 1242:Rescue(BFS广搜 + 优先队列)
Rescue Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- NYOJ 284 坦克大战 【BFS】+【优先队列】
坦克大战 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 Many of us had played the game "Battle city" ...
- UVALive 2035 The Monocycle(BFS状态处理+优先队列)
这道题目真是非常坎坷啊,WA了很多次,但所有的思路都是奔着广搜去想的,一开始出现了比答案大的数据,才想到了应该是优先队列,再说加上也肯定不会错.一开始我读错了题意,以为旋转并且前行需要的时间跟其他一样 ...
- HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)
Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...
- POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]
题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...
- poj2312 Battle City 【暴力 或 优先队列+BFS 或 BFS】
题意:M行N列的矩阵.Y:起点,T:终点.S.R不能走,走B花费2,走E花费1.求Y到T的最短时间. 三种解法.♪(^∇^*) //解法一:暴力 //157MS #include<cstdio& ...
- URAL 1930 Ivan's Car(BFS)
Ivan's Car Time limit: 1.5 secondMemory limit: 64 MB The world is in danger! Awful earthquakes are d ...
随机推荐
- Codeforces 825D 二分贪心
题意:给一个 s 串和 t 串, s 串中有若干问号,问如何填充问号使得 s 串中字母可以组成最多的 t 串.输出填充后的 s 串. 思路:想了下感觉直接怼有点麻烦,要分情况:先处理已经可以组成 t ...
- SublimeText学习(二)-基本操作
1.查看已安装的插件 看到已经安装的插件,看到了在上一篇中安装的Emmet 2.设置主题与字体 方法一: 方法二: 工具栏中 [Preference-浏览程序包]找到[Default文件夹]-用Sub ...
- python--11、数据库及SQL基础
常用命令记录 查看库中所有表的引擎 SHOW TABLE STATUS FROM `center_main_db`; 还有一个更简洁,查询cmol_system_db库所有表的存储引擎\ SELECT ...
- PHP魔术法__set和__get
__set: 在给不可访问属性赋值时,__set() 会被调用.语法如下: public void __set ( string $name , mixed $value ) __get: 读取不可访 ...
- Ajax——异步基础知识(一)
基础概念 1.异步请求可以做到偷偷向服务器发送请求,而页面却不刷新 2.get异步请求传递参数是通过url追加键值对的方式 3.post异步请求比较特殊,需要设置请求的类型 User-Agent:浏览 ...
- 【译】x86程序员手册03 - 2.1内存组织和分段
2.1 Memory Organization and Segmentation 内存组织和分段 The physical memory of an 80386 system is organized ...
- PHP操作Redis相关函数
String数据类型 $redis->set('key','TK'); $redis->set('number','1'); //设置值 $redis->setex('key',5, ...
- 原生js实现瀑布流效果
参考此篇:https://segmentfault.com/a/1190000012621936 以下为个人测试中: css: .masonry{ width:100%; } .item{ posit ...
- CodeCombat代码全记录(Python学习利器)--Kithgard地牢代码1
Kithgard地牢注意:在调用函数时,要在函数的后面加上括号内容,否则在python中,将不会认为你在调用这个函数内容,而你的英雄将像木头一样站在原地不会执行上左下右的移动!!! hero.move ...
- POJ3278——Catch That Cow
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 114140 Accepted: 35715 ...