Acdream原创群赛3(部分题解)
2012-11-21 19:48
162 查看
比赛网址链接:http://www.acdream.net/contest.php?cid=1010
A题: 按位异或。讨论情况。
C题:经典广搜。先打表存储各个数的因子。
G题:可以说是规律题。常规方法nlogn肯定超时。
H题:简单的二分匹配。
I题:树形dfs。
A
题目大意:给你两个有同样多元素的集合,求一个最小的x,x异或A中所有元素的结果都落在B集合中,且形成一一映射。
解题思路:关键就在于一一映射,并且先把所有的数都转换成二进制 => A,B中元素每位对应的0和1计算出来。假设第1位, A有a0个0,a1个1,b有b1个1,b0个0,
如果a0==b0&&a1==b1 那么x对应的此位必为0,否则a0==b1&&a1==b0,x对应的此位必为1.
View Code
A题: 按位异或。讨论情况。
C题:经典广搜。先打表存储各个数的因子。
G题:可以说是规律题。常规方法nlogn肯定超时。
H题:简单的二分匹配。
I题:树形dfs。
A
题目大意:给你两个有同样多元素的集合,求一个最小的x,x异或A中所有元素的结果都落在B集合中,且形成一一映射。
解题思路:关键就在于一一映射,并且先把所有的数都转换成二进制 => A,B中元素每位对应的0和1计算出来。假设第1位, A有a0个0,a1个1,b有b1个1,b0个0,
如果a0==b0&&a1==b1 那么x对应的此位必为0,否则a0==b1&&a1==b0,x对应的此位必为1.
View Code
#include <cstdio> #include <iostream> #include <cstring> #include <vector> #include <algorithm> using namespace std; const int maxn=100005; int f[maxn]; vector<int>vt[maxn]; int n; int dfs(int u, int fa) { f[u]=1; for(int i=0; i<vt[u].size(); i++) { if(vt[u][i]==fa) continue; f[u]+=dfs(vt[u][i],u); } return f[u]; } int main() { int u, v; while(cin >> n) { for(int i=1; i<=n; i++) vt[i].clear(); for(int i=0; i<n-1; i++) { scanf("%d%d",&u,&v); vt[u].push_back(v); vt[v].push_back(u); } dfs(1,1); int ans=0; for(int i=1; i<=n; i++) { if(f[i]%2==0) ans++; } cout << ans-1 <<endl; } return 0; }
相关文章推荐
- Zhejiang Provincial Programming Contest 2007 部分题解
- 2016多校联合第5场部分题解 HDU5780,5781,5783,5784,5785,5787,5791,5792
- 17新生测试大题部分 题解
- [leetcode]题解+经验总结 自己做法+评论区mostvotes汇总 (只包含部分easy难度)
- 风云杯大学生信安大赛(Web部分题解)
- BestCoder Round #20 部分题解(A,B,C)(hdu5123,5124,5125)
- 2014北京邀请赛(部分题解)
- 【2013南京区域赛】部分题解 hdu4802—4812
- VK Cup 2012 Qualification Round 2部分题解(C,D,E)
- ACdream原创群赛(18)のAK's dream题解
- Wannafly挑战赛4 部分题解
- “怎样解题”-第二部分:怎样题解——作者:波利亚
- 网络流24题 题解 (部分) 更新中
- 团体程序设计天梯赛-习题集部分题解(大牛勿喷)
- POJ数据结构专辑(含部分题解)
- 洛咕11月月赛部分题解 By cellur925
- GCJ Qualification Round 2017 题解(部分)
- 【2012天津区域赛】部分题解 hdu4431—4441
- 2014 ACM/ICPC牡丹江区域赛部分题解
- 【2013长沙区域赛】部分题解 hdu4791—4801