【二叉树、堆】15轻院校赛-J-堆

原题:http://acm.zzuli.edu.cn/problem.php?cid=1099&pid=9

【描述】

【输入】

【输出】

Sample Input

3

1

10

3

10 5 3

1 2

1 3

5

1 2 3 4 5

3 1

2 1

2 4

2 5

Sample Output

Yes

No

Yes

【代码】

转自:http://www.cnblogs.com/chenchengxun/p/4443560.html

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<stack>
 4 #include<queue>
 5 #include<math.h>
 6 #include<stdlib.h>
 7 #include<cstring>
 8 #include<algorithm>
 9 using namespace std;
10 #define Max(a,b) (a>b?a:b)
11 #define Min(a,b) (a<b?a:b)
12 #define INF 0xfffffff
13 #define maxn 410
14
15 int Tree[maxn][maxn], n, flag, Value[maxn], vis[maxn];
16
17 void DFS(int k)
18 {
19
20     vis[k] = 1;
21     for(int i=1; i<=n; i++)
22     {
23         if(Tree[k][i] && !vis[i])
24         {
25             if(Value[k] <= Value[i])
26                 DFS(i);
27             else
28                 flag = 1;
29         }
30     }
31 }
32
33 int main()
34 {
35     int T, i, a, b;
36
37     cin >> T;
38
39     while(T--)
40     {
41         cin >> n;
42         flag = 0;
43         memset(Tree, 0, sizeof(Tree));
44         memset(vis, 0, sizeof(vis));
45         for(i=1; i<=n; i++)
46             cin >> Value[i];
47
48         for(i=1; i<n; i++)
49         {
50             cin >> a >> b;
51             Tree[a][b] = 1;
52         }
53
54         DFS(1);
55         if(flag)
56             printf("No\n");
57         else
58             printf("Yes\n");
59     }
60     return 0;
61 }
时间: 2024-08-29 14:24:07

【二叉树、堆】15轻院校赛-J-堆的相关文章

【DFS+堆的二叉树结构】15轻院校赛-J-堆

[题目链接:J-堆] 1734: 堆 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 239  Solved: 113 SubmitStatusWeb Board Description Input Output Sample Input 3 1 10 3 10 5 3 1 2 1 3 5 1 2 3 4 5 3 1 2 1 2 4 2 5 Sample Output Yes No Yes [思路] 堆:堆最重要的性质就是儿子的值一定不小于父亲的值.

第九届玲珑轻院校赛随笔

迎着小雨,我来到了翻车圣地---轻工业学院,我是来这几次翻几次,所以一开始心情就十分忐忑,开始的时候特别高大上,弄得跟省赛一样,还有个参赛证,不过因为意外,比赛推迟了一个小时,然后我们提前10分钟拿到了题目,因为是组队赛,所以与一开始我们分别看了三道题,,当他们两个讨论的时候,,我发现了,,以我的水平做不了分给我的那道题,然后我就在写生日party和烫饭那道题,我主要是自己单扣,生日party那道题模拟出来了但是卡常数,就TEL了,,然后就到中场吃东西时间啦,午餐很丰富,然后我就在饱腹感中AC了

2015轻院校赛 B 迷宫 (bfs)

http://acm.zznu.edu.cn/problem.php?id=1967 这套题的有毒   我交了好多遍才对 坑:机关要按照顺序走 并且在走这个机关之前不能走这个机关  但是能穿过这个机关   所以不能把机关刚开始设成墙 要设成其他符号 #include <iostream> #include <cstring> #include <algorithm> #include <queue> #include <cstdio> #incl

2015轻院校赛 D 社交网络(排列组合)

http://acm.zznu.edu.cn/problem.php?id=1964 题目描述 输入 输出 样例输入 2 2 1 0 1 1 0 3 1 0 1 1 1 0 1 1 1 0 样例输出 0.500 1.125 提示 之前想了一个公式  就是0.5*pow(0.5,k)*C(k,n); k是至少认识k个人   n是认识n个人 后来队友都把所有的东西都写出来了我才去验证第二个测试数据  发现是错的  当时真的想自己从五楼上跳下来 正确的公式应该是 for(i=k;i<=n;i++) {

2016轻院校赛E作死报告

#include <stdio.h>int nums[1000005], judge[1000005];///nums数组表示从1900年到某年期间的闰年个数int days[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};void Init(){ for(int i=1900; i<=1000000; i

堆的实现(建立大小堆、push、pop元素)

堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构. 堆结构的二叉树存储: 大堆:每个父节点的都大于孩子节点:小堆:每个父节点的都小于孩子节点. 建堆:由于堆被视为完全二叉树,故在h-1层找到第一个(从后往前找)非叶子结点,进行堆的下调 建大堆时,从下往上依次判断并调整堆,使该结点的左右子树都满足大堆 建小堆时,从下往上依次判断并调整堆,使该结点的左右子树都满足小堆 可见大堆的建立与小堆的建立方式类似,下面以大堆进行讨论. 利用vactor模板存储堆中元素 template<class T

随便说说堆(一)——二叉堆

二叉堆可以被看作是一个数组,也可以简单的看作是一个近似的完全二叉树,二叉堆有最大堆和最小堆,分别具有堆的性质:最大堆的某个结点的值最多与其父结点一样大,最小堆则是某个结点的值最多与其父结点一样小.所以最大堆中最大的结点永远是根结点,最小堆中最小的结点永远是根节点. 既然二叉堆是一种数据结构,就有其支持的操作(这里以最小堆为例): make_heap:建立一个空堆,或者把数组中元素转换成二叉堆. insert:插入元素. minimun:返回一个最小数. extract_min:移除最小结点. u

笔试算法题(46):简介 - 二叉堆 &amp; 二项树 &amp; 二项堆 &amp; 斐波那契堆

二叉堆(Binary Heap) 二叉堆是完全二叉树(或者近似完全二叉树):其满足堆的特性:父节点的值>=(<=)任何一个子节点的键值,并且每个左子树或者右子树都是一 个二叉堆(最小堆或者最大堆):一般使用数组构建二叉堆,对于array[i]而言,其左子节点为array[2*i],其右子节点为 array[2*i+1]:二叉堆支持插入,删除,查找最大(最小)键值的操作,但是合并二叉堆的复杂度较高,时间复杂度为O(N):但是二项堆或者斐波 那契堆则仅需要O(logN): 二项树(Binomial

西电校赛网络赛J题 lucas定理计算组合数

西电校赛网络赛J题  lucas定理计算组合数 问题 J: 找规律II 时间限制: 1 Sec  内存限制: 128 MB 提交: 96  解决: 16 [提交][状态][讨论版] 题目描述 现有数阵如下: 1    2  3   4     5    6 1   3   6  10  15 1   4  10   20 1   5   15 1    6 1 求这个数阵的第n行m列是多少(行列标号从1开始) 结果对10007取模 输入 多组数据,每组数据一行,包含两个整数n,m(1<=n<=