比赛 CSP2023-J模拟赛 评测结果 WWWWTTTTTT
题目名称 新建题目 最终得分 0
用户昵称 xuuu 运行时间 6.000 s
代码语言 C++ 内存使用 15.47 MiB
提交时间 2023-10-18 20:09:53
显示代码纯文本
#include<bits/stdc++.h>
#define inf 0x3f3f3f
using namespace std;
  inline int read(){
    int x = 0,f = 1;
    char ch = getchar();
    while(ch < '0'||ch > '9')
    {
        if(ch == '-')
            f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
        x = x * 10 + ch - '0',ch = getchar();
    return x*f;
 }
 int n,u,v,mp[2050][2050],p[2050],cnt,m;
 bool vis[2050][2050];
 int main(){
 	freopen("touch.in","r",stdin);
 	freopen("touch.out","w",stdout);
 	n = read();
 	for(int i = 1;i <= n;i ++) cin>>p[i];
 	for(int i = 1;i <= n;i ++){
 		for(int j = 1;j <= n;j ++){
 			if(i == j) mp[i][j] = 0;
 			else mp[i][j] = inf;
		 }
	 }
 	for(int i = 1;i <= n - 1;i ++){
 		cin>>u>>v;
 		mp[u][v] = 1;
 		mp[v][u] = 1;
	 }
 	for(int k = 1;k <= n;k ++){
 		for(int i = 1;i <= n;i ++){
 			for(int j = 1;j <= n;j ++){
 				if(mp[i][j] > mp[i][k] + mp[k][j]){
 					mp[i][j] = mp[i][k] + mp[k][j];
				 }
			 }
		 }
	 }
	for(int x = 1;x <= n;x ++){
 		for(int y = 1;y <= n;y ++){
 			if(mp[1][x] > mp[1][y] && p[x] > p[y] && vis[x][y]){
 				cnt ++;
 				vis[y][x] = 1;
			 }
		 }
	 }
	 cout<<cnt;	
 	return 0;
 }