传染病控制

思路:

  题目想问的是:

    有一棵树;

    对于除1外每个深度可以剪掉一棵子树;

    问最后剩下多少节点;

  题目意思一简单,这个题立马就变水了;

  搜索就能ac;

  数据有为链的情况,按深度为层次搜索的话要记得提前记录答案并return;

来,上代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 305
#define maxm 90005
#define INF 0x7fffffff int n,m,head[maxn],E[maxm],V[maxm],cnt,ans=INF,dep[maxn];
int l[maxn],r[maxn],size[maxn],map[maxn][maxn],deepest; bool if_[maxn]; inline void in(int &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} inline void edge_add(int u,int v)
{
E[++cnt]=head[u],V[cnt]=v,head[u]=cnt;
E[++cnt]=head[v],V[cnt]=u,head[v]=cnt;
} void pre(int now,int fa,int deep)
{
deepest=max(deep,deepest),dep[now]=deep;
map[deep][++size[deep]]=now,l[now]=++cnt;
for(int i=head[now];i;i=E[i])
{
if(V[i]==fa) continue;
pre(V[i],now,deep+);
}
r[now]=cnt;
} void dfs(int now,int ans_)
{
if(ans_>=ans) return ;
if(now==deepest)
{
ans=ans_;
return ;
}
int pos=-;
for(int i=;i<=size[now+];i++) if(!if_[l[map[now+][i]]]) pos++;
if(pos==-)
{
ans=min(ans,ans_);
return ;
}
for(int v=;v<=size[now];v++)
{
if(if_[l[map[now][v]]]) continue;
for(int i=head[map[now][v]];i;i=E[i])
{
if(dep[V[i]]>dep[now]&&!if_[l[V[i]]])
{
for(int j=l[V[i]];j<=r[V[i]];j++) if_[j]=true;
dfs(now+,ans_+pos);
for(int j=l[V[i]];j<=r[V[i]];j++) if_[j]=false;
}
}
}
} int main()
{
in(n),in(m);int u,v;
while(m--)
{
in(u),in(v);
edge_add(u,v);
}
cnt=,pre(,,),dfs(,);
cout<<ans;
return ;
}

最新文章

  1. CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案
  2. 原生js颗粒页换图效果
  3. HTML 文本格式化
  4. Deferred
  5. 一个测ip和端口是否联通的工具类
  6. DNS详解
  7. Hadoop-1.0.4伪分布安装与配置
  8. Python档案袋(生成器、迭代器、队列 )
  9. 【easy】111. Minimum Depth of Binary Tree求二叉树的最小深度
  10. 爬虫豆瓣top250项目-开发文档
  11. oracle报错 ORA-02290: 违反检查约束条件问题
  12. 【转】Winform程序未捕获异常解决方法 EventType clr20r3 P1
  13. 第二部分 OpenStack安装与配置
  14. memcached与redis实现的对比
  15. Zookeeper(三) Zookeeper原理与应用
  16. IIS:连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解
  17. 解决gradle下载慢的问题(转)
  18. 初用sqlite3.exe
  19. pat1004. Counting Leaves (30)
  20. form表单提交信息的方式

热门文章

  1. RGB色彩的计算机表示
  2. Codeforces:68A-Irrational problem(暴力大法好)
  3. Python接口测试之封装requests
  4. loj2043 「CQOI2016」K 远点对
  5. Python框架之Django学习笔记(十一)
  6. 【Interleaving String】cpp
  7. day05_06 continue语句、while循环
  8. 在IE浏览器下,PDF将弹出窗口遮挡了
  9. hdu 4185 二分图最大匹配
  10. 【转】UGUI EventSystem