1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n,m,x,y,z,a,b,suma=0;
	cin>>n>>m;
	int tab[n+1][m+1];
	for(x=0;x<n+1;x++)
		for(y=0;y<m+1;y++)tab[x][y]=0;
	int ta[m+1];
	int spr[n+1][2];
	for(x=0;x<n+1;x++)ta[x]=0;
	for(z=0;z<n+1;z++)tab[z][m]=0;
	for(z=0;z<n-1;z++){
		cin>>a>>b;
		if(a>m){
			tab[a][tab[a][m]]=b;
			tab[a][m]++;
			}
		if(b>m&&a<=m){
			tab[b][tab[b][m]]=a;
			tab[b][m]++;
		}
	}
	for(z=1;z<=m;z++)cin>>ta[z];
	for(z=m+1;z<=n;z++){
		a=500000;
		b=0;
		for(x=0;x<tab[z][m];x++){
			if(tab[z][x]<=m&&tab[z][x]!=0){
				if(ta[tab[z][x]]<a&&ta[tab[z][x]]>0)a=ta[tab[z][x]];
				if(ta[tab[z][x]]>b&&ta[tab[z][x]]<=500000)b=ta[tab[z][x]];
			}
			spr[z][0]=b;
			spr[z][1]=a;
		}
		suma=suma+(b-a);
	}
	for(z=m+1;z<=n;z++){
		for(x=0;x<tab[z][m];x++){
			if(tab[z][x]>m&&tab[z][x]!=0){
				if(spr[z][1]>spr[tab[z][x]][0])suma=suma+(spr[z][1]-spr[tab[z][x]][0]);
				if(spr[z][0]<spr[tab[z][x]][1])suma=suma+(spr[tab[z][x]][1]-spr[z][0]);
			}
		}
	}
	cout<<suma;
	return 0;
}