题意

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&amp;&amp;优先队列)的更多相关文章

  1. GDUT——1169: Krito的讨伐(优先队列BFS)

    1169: Krito的讨伐 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 619  Solved: 102 Description Krito终于干 ...

  2. 广东工业大学2016校赛决赛-网络赛 1169 Problem A: Krito的讨伐 优先队列

    Problem A: Krito的讨伐 Description Krito终于干掉了99层的boss,来到了第100层.第100层可以表示成一颗树,这棵树有n个节点(编号从0到n-1),树上每一个节点 ...

  3. hdu 1242:Rescue(BFS广搜 + 优先队列)

    Rescue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  4. NYOJ 284 坦克大战 【BFS】+【优先队列】

    坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 Many of us had played the game "Battle city" ...

  5. UVALive 2035 The Monocycle(BFS状态处理+优先队列)

    这道题目真是非常坎坷啊,WA了很多次,但所有的思路都是奔着广搜去想的,一开始出现了比答案大的数据,才想到了应该是优先队列,再说加上也肯定不会错.一开始我读错了题意,以为旋转并且前行需要的时间跟其他一样 ...

  6. HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)

    Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...

  7. POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]

    题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...

  8. poj2312 Battle City 【暴力 或 优先队列+BFS 或 BFS】

    题意:M行N列的矩阵.Y:起点,T:终点.S.R不能走,走B花费2,走E花费1.求Y到T的最短时间. 三种解法.♪(^∇^*) //解法一:暴力 //157MS #include<cstdio& ...

  9. 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 ...

随机推荐

  1. python 生成器函数.推导式.生成器表达式

    一.生成器 什么是生成器,生成器的实质就是迭代器 在python中有三种方式来获取生成器: 1.通过生成器函数 2.通过各种推导式来实现生成器 3.通过数据的转换也可以获取生成器 1 def func ...

  2. web.xml里,classpath使用范围

    比如说在web.xml里,配置spring监听. 在标签<param-value>里,classpath指向的配置文件路径应该是在config资源文件夹下的applicationConte ...

  3. C# 接口命名规范

    接口命名规范:1.大写约定PascalCasing:帕斯卡命名法,每个单词首字母大写应用场景:命名空间.类型.接口.方法.属性.事件.字段.枚举.枚举值eg:HtmlTag IOStream注意:两个 ...

  4. Unity Sprite Packer 问题集合

    介绍 今天突发奇想用了下sprite packer 这个功能,基本用法网上教程一堆一堆的,这里就不赘述了. 在使用sprite packer过程中遇到一些问题,然后各种百度不到答案,最后和谐上网找到了 ...

  5. J2EE集群原理(摘录)

    J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念:“负载均衡”(load balancing)和“失效备援”(failover)  图一:负载均衡 多个客户端同时发出请求,位于前端的负载均衡 ...

  6. ubuntu14.3安装phpmyadmin

    一.安装 sudo apt-get install phpmyadmin 二.软连接 cd /var/www/html/ sudo ln -s /usr/share/phpmyadmin phpmya ...

  7. 用Grunt进行CSS文件压缩

    假设你的项目的CSS文件全部放在项目目录下名为css的文件夹中,现在将它压缩合并成一个名为main-min.css的文件,放在css-min文件夹下. (1)首先保证机器安装了node.js. (2) ...

  8. MYSQL数据库迁移到ORACLE数据库

    一.环境和需求1.环境 MySQL数据库服务器: OS version:Linux 5.3 for 64 bit mysql Server version: 5.0.45 Oracle数据库服务器: ...

  9. Python 之lxml解析库

    一.XPath常用规则 二.解析html文件 from lxml import etree # 读取HTML文件进行解析 def parse_html_file(): html = etree.par ...

  10. php 在Linux下的安装

    1.获取php源码 wget http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror mv mirror php-5.6.6.tar.gz t ...