Pagini recente » Cod sursa (job #2674791) | Cod sursa (job #1017128) | Cod sursa (job #445974) | Cod sursa (job #1738408) | Cod sursa (job #1089749)
using namespace std;
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<utility>
#include<cstdio>
#include<cstdlib>
#include<cassert>
#include<numeric>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<deque>
const int INFI=(1LL<<30)-100;
const long long INFL=(1LL<<62)-100;
const double eps=1e-10;
const long double pi=acos(-1.0);
const int MAXN=100010;
vector<int> v[MAXN],arb[MAXN];
int lvl[MAXN],fth[MAXN],sons[MAXN];
int dp[MAXN];
int main(){
freopen("arbore5.in","r",stdin);
freopen("arbore5.out","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
queue<int> q;
q.push(1);
fth[1]=-1;
while(!q.empty()){
int i=q.front();
q.pop();
for(unsigned j=0;j<v[i].size();j++){
int u=v[i][j];
if(!fth[u]){
fth[u]=i;
sons[i]++;
arb[i].push_back(u);
q.push(u);
}
}
}
for(int i=1;i<=m;i++){
int ax,ay;
scanf("%d%d",&ax,&ay);
dp[ax]++;
dp[ay]++;
}
for(int i=1;i<=n;i++){
if(!sons[i]){
q.push(i);
}
}
int sum=0;
while(!q.empty()){
int i=q.front();
q.pop();
if(i==1){
break;
}
for(unsigned j=0;j<arb[i].size();j++){
dp[i]+=dp[arb[i][j]];
}
sum+=(dp[i]%2==0);
sons[fth[i]]--;
if(!sons[fth[i]]){
q.push(fth[i]);
}
}
printf("%d",sum);
return 0;
}