比赛 |
20241128 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
猴猴的比赛 |
最终得分 |
100 |
用户昵称 |
黄天宇 |
运行时间 |
3.127 s |
代码语言 |
C++ |
内存使用 |
20.72 MiB |
提交时间 |
2024-11-28 11:18:33 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+5;
int n;
int num1,num2,head1[MAXN],head2[MAXN];
int d1[MAXN],d2[MAXN];
int fa1[MAXN],fa2[MAXN];
bool vis[MAXN];
int cnt;
int p1,p2;
vector<int> c1[MAXN],c2[MAXN];
priority_queue<pair<int,int> > q1,q2;
int find(int root,int x,int flag){
if(flag==1){
if(x==fa1[x]){
return x;
}else{
q1.push(make_pair(root,fa1[x]));
return find(root,fa1[x],1);
}
}else{
if(x==fa2[x]){
return x;
}else{
q2.push(make_pair(root,fa2[x]));
return find(root,fa2[x],2);
}
}
}
int main(){
freopen("monkeyclim.in","r",stdin);
freopen("monkeyclim.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
fa1[i]=i;
fa2[i]=i;
}
for(int i=1;i<=n-1;i++){
int x,y;
cin>>x>>y;
if(x>y) swap(x,y);
fa1[y]=x;
}
for(int i=1;i<=n;i++){
int x=find(i,i,1);
}
for(int i=1;i<=n-1;i++){
int x,y;
cin>>x>>y;
if(x>y) swap(x,y);
fa2[y]=x;
}
for(int i=1;i<=n;i++){
int x=find(i,i,2);
}
while(!q1.empty()||!q2.empty()){
while(q1.top().first>q2.top().first){
q1.pop();
}
while(q1.top().first<q2.top().first){
q2.pop();
}
if(q1.top().second==q2.top().second){
cnt++;
q1.pop();
q2.pop();
}else
if(q1.top().second>q2.top().second){
q1.pop();
}else q2.pop();
}
cout<<cnt<<endl;
return 0;
}