题解 A 生成树
生成树
https://ac.nowcoder.com/acm/contest/6607/A
由于要求边完全相同,所以在 A 中存在的边但 B 中不存在的一定会被删掉,其它边保留,连边就连 B 中剩下没连的。
所以,只用统计 A 中出现过的但 B 中没有出现过的边,对于一条边 ,如果 交换 ,然后查询数对是否出现过即可。
用一个 map 维护。
#include<bits/stdc++.h> #define re using namespace std; #define int long long inline int read(){ re int t=0;re char v=getchar(); while(v<'0')v=getchar(); while(v>='0')t=(t<<3)+(t<<1)+v-48,v=getchar(); return t; } map<int,int>v; int n,ans; signed main(){ n=read(); for(re int i=1,x,y;i<n;++i){ x=read(),y=read(); if(x>y)x^=y^=x^=y; v[x*n+y]=1; } for(re int i=1,x,y;i<n;++i){ x=read(),y=read(); if(x>y)x^=y^=x^=y; if(!v[x*n+y])++ans; } printf("%lld",ans); }