NC20807. 生成树
描述
输入描述
一个整数n表示无向图的点数
接下来n - 1行,每行两个整数u, v表示第一棵生成树中的边
再接下来n - 1行,每行两个整数u, v表示第二棵生成树中的边
输出描述
一个整数,表示最少操作次数
示例1
输入:
6 6 1 1 2 2 3 3 5 5 4 1 2 2 4 4 5 5 3 6 4
输出:
2
说明:
示例2
输入:
3 1 2 2 3 1 3 3 2
输出:
1
示例3
输入:
2 1 2 2 1
输出:
0
Python3(3.5.2) 解法, 执行用时: 826ms, 内存消耗: 24028K, 提交时间: 2018-11-01 21:17:22
n=int(input("")) ans=0; mp={} for i in range(n-1): x,y=map(int,input().split()) if x>y: x,y=y,x mp[(x,y)]=1 for i in range(n-1): x,y=map(int,input().split()) if x>y: x,y=y,x if not(mp.get((x,y))): ans+=1 print(ans);
C 解法, 执行用时: 55ms, 内存消耗: 800K, 提交时间: 2022-03-20 14:21:41
#include<stdio.h> int main(){ int tree[100010],ans=0; int n,u,v; scanf("%d",&n); for(int i=0;i<n-1;i++){ scanf("%d%d",&u,&v); tree[u]=v; } for(int i=0;i<n-1;i++){ scanf("%d%d",&u,&v); if(tree[u]==v||tree[v]==u){ ans++; } } printf("%d\n",n-1-ans); }
pypy3 解法, 执行用时: 602ms, 内存消耗: 37416K, 提交时间: 2022-04-16 21:41:58
n = int(input()) ans = 0 mp={} for i in range(n-1): x,y=map(int,input().split()) x,y = min(x,y),max(x,y) mp[(x,y)]=1 for i in range(n-1): x,y=map(int,input().split()) x,y = min(x,y),max(x,y) if not(mp.get((x,y))): ans+=1 print(ans)
C++11(clang++ 3.9) 解法, 执行用时: 105ms, 内存消耗: 836K, 提交时间: 2020-07-28 19:48:42
#include<bits/stdc++.h> using namespace std; int a[100005]; int main() { int n,x,y,s=0; cin>>n; for(int i=0;i<n-1;i++) { cin>>x>>y; a[x]=y; } for(int i=0;i<n-1;i++) { cin>>x>>y; if(a[x]!=y&&a[y]!=x) s++; } cout<<s; return 0; }