第一问就是Σ(deg[u]-1)/2+1

第二问是二分,判断的时候考虑第一问的贪心规则,对于奇度数的点,两两配对之后一条延伸到上面;对于欧度数的点,两两配对或者deg[u]-2的点配对,然后一条断在这个点,一条延伸上去,按这个树形dp判断一下即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=10005;
int n,h[N],cnt,ans=1,d[N],f[N],fl,a[N],tot;
struct qwe
{
int ne,to;
}e[N<<1];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
d[v]++;
h[u]=cnt;
}
bool pd(int mid,int w)
{
int l=1,r=tot;
while(l<r)
{
if(l==mid)
l++;
if(r==mid)
r--;
if(a[l]+a[r]>w)
return 0;
l++,r--;
}
return 1;
}
void dfs(int u,int fa,int w)
{
if(!fl)
return;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fa)
dfs(e[i].to,u,w);
f[u]=0,tot=0;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fa)
a[++tot]=f[e[i].to]+1;
sort(a+1,a+1+tot);
if(!tot)
return;
if(a[tot]>w)
{
fl=0;
return;
}
if(!(tot&1))
{
for(int i=1;i<=tot/2;i++)
if(a[i]+a[tot-i+1]>w)
{
if(u==1)
{
fl=0;
return;
}
else
{
tot--;
break;
}
}
}
if(tot&1)
{
int l=1,r=tot,ans=tot+1;
while(l<=r)
{
int mid=(l+r)>>1;
if(pd(mid,w))
r=mid-1,ans=mid;
else
l=mid+1;
}
if(ans>tot)
{
fl=0;
return;
}
else
f[u]=a[ans];
}
}
bool ok(int w)
{
fl=1;
dfs(1,0,w);
return fl;
}
int main()
{
n=read();
for(int i=1;i<n;i++)
{
int x=read(),y=read();
add(x,y),add(y,x);
}
for(int i=1;i<=n;i++)
ans+=(d[i]-1)>>1;
int l=1,r=n,len=1;
while(l<=r)
{
int mid=(l+r)>>1;
if(ok(mid))
r=mid-1,len=mid;
else
l=mid+1;
}
printf("%d %d\n",ans,len);
return 0;
}

最新文章

  1. Create a bridge using a tagged vlan (8021.q) interface
  2. 假期实践作业:从IT角度看地铁
  3. jsp+servlet
  4. js用正则表达式验证用户和密码的安全性,生成随机验证码
  5. bjfu1299 stl使用
  6. iOS NSDate与NSString之间的相互转换
  7. 【ActiveX】实现安全接口
  8. List Of All Machine Learning Sorted By Citation
  9. 从linux telnet到exchange邮件server来測试发送邮件
  10. DOM缘起
  11. Swift语法学习之 类和结构体
  12. LayoutInflater 三种获得方式
  13. 剑指Offer——乐视笔试题+知识点总结
  14. EL表达式 - 日常使用表达式记录
  15. AQS原理以及AQS同步组件总结
  16. [2017-7-25]Android Learning Day3
  17. php include 绝对路径 dirname(__FILE__)
  18. python接口自动化测试(六)-unittest-单个用例管理
  19. spark集群使用hanlp进行分布式分词操作说明
  20. CentOS 安装 Docker CE

热门文章

  1. 安卓自带下拉刷新SwipeRefreshLayout加入上拉刷新功能
  2. android 文件读取(assets)
  3. 2.6.2 用NPOI操作EXCEL--设置密码才可以修改单元格内容
  4. 移动Web开发实践
  5. 项目问题总结2:GUID区分大写和小写吗?
  6. 二分法和牛顿迭代实现开根号函数:OC的实现
  7. Region Range
  8. Pattern: API Gateway / Backend for Front-End
  9. idea 破解注册方法总结
  10. Codeforces Round #Pi (Div. 2) C. Geometric Progression