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

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

【描述】

【输入】

【二叉树、堆】15轻院校赛-J-堆_第1张图片

【输出】

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
 
【代码】
 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 }

 

你可能感兴趣的:(二叉树)