原题: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
【代码】
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 "); 57 else 58 printf("Yes "); 59 } 60 return 0; 61 }