bzoj2071: [POI2004]JAS
2015-10-28 17:05
218 查看
Description
在Byteotia有一个洞穴. 它包含n 个洞室和一些隧道连接他们. 每个洞室之间只有一条唯一的路径连接他们. Hansel 在其中一个洞室藏了宝藏, 但是它不会说出它在哪. Gretel 想知道. 当她询问一个洞室是否有宝藏时,如果她猜对了Hansel 会告诉她,如果猜错了他会告诉她哪个方向会有宝藏. 给出洞穴的信息,那么无论Hansel 把宝藏藏在了哪,求出最少要询问多少次才能找到宝藏.Input
输入一个数n, 1<= n <= 50,000. 表示洞室总数,接下来n-1 行描述n – 1条边.Output
输出一个数表示最少询问次数.Sample Input
51 2
2 3
4 3
5
3
Sample Output
2code:
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #define maxn 50005 using namespace std; char ch; int n,m,a,b,s1[20],f[maxn],sta[maxn],tot,now[maxn],son[maxn<<1],pre[maxn<<1]; bool ok; void read(int &x){ for (ok=0,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=1; for (x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar()); if (ok) x=-x; } void put(int a,int b){pre[++tot]=now[a],now[a]=tot,son[tot]=b;} void dfs(int u,int fa){ int s2=0,cu=0,deg=0; for (int p=now[u],v=son[p];p;p=pre[p],v=son[p]) if (v!=fa) dfs(v,u),s2|=sta[v],deg++; if (!deg){f[u]=0,sta[u]=1;return;} memset(s1,0,sizeof(s1)); for (int p=now[u],v=son[p];p;p=pre[p],v=son[p]) if (v!=fa) for (int i=0;i<m;i++) if (sta[v]&(1<<i)) s1[i]++; if (deg>1) for (int i=m-1;i>=0;i--) if (s1[i]>=2){cu=i+1;break;} for (int i=cu;i<m;i++) if (!(s2&(1<<i))){cu=i;break;} sta[u]=((s2>>cu)|1)<<cu,f[u]=cu; for (int p=now[u],v=son[p];p;p=pre[p],v=son[p]) if (v!=fa) f[u]=max(f[u],f[v]); } int main(){ read(n),m=log2(n)+1; for (int i=1;i<n;i++) read(a),read(b),put(a,b),put(b,a); dfs(1,0); printf("%d\n",f[1]); return 0; }
相关文章推荐
- mongo shell启动配置文件.mongorc.js(三)
- C#中的装箱(Boxing)和拆箱(Unboxing)
- Android 各种Adapter
- mongo shell启动配置文件.mongorc.js(二)
- 【socket】socket介绍-socket深入内核解析
- mongo shell启动配置文件.mongorc.js(二)
- NAO机器人的介绍与参数
- Activiti博客资源贴
- linnux shell 数组
- 大公司里怎样开发和部署前端代码?
- Apache+mysql+php+phpMyAdmin最详细安装过程
- discuz 更新uckey
- 冒泡
- mongo shell启动配置文件.mongorc.js(一)
- linux安装jdk出现java/lang/NoClassDefFoundError: java/lang/Object错误的解决方案
- 黑马程序员——OC基础---Foundation之NSString
- AIR程序的多开
- listener监听器
- HTML表格
- 如何解决win10桌面图标位置和排列方式无法保存问题