原题传送门

求树的最小点覆盖,就是一个树形dp

类似于没有上司的舞会

dp的状态为\(f[i][0/1]\),表示i节点是否选择

边界是\(f[x][0]=0\),\(f[x][1]=1\)

转移方程是

\(f[i][0]=\sum_{j=son[i]} f[j][1]\)

\(f[i][1]=\sum_{j=son[i]} Min(f[j][0],f[j][1])\)

最后答案就是\(Min(f[1][0],f[1][1])\)

#include <bits/stdc++.h>
#define getchar nc
#define N 100005
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
register int x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(register int x)
{
if(!x)putchar('0');if(x<0)x=-x,putchar('-');
static int sta[20];register int tot=0;
while(x)sta[tot++]=x%10,x/=10;
while(tot)putchar(sta[--tot]+48);
}
inline int Min(register int a,register int b)
{
return a<b?a:b;
}
struct node{
int to,next;
}e[N<<1];
int head[N],cnt=0;
inline void add(register int u,register int v)
{
e[++cnt]=(node){v,head[u]};
head[u]=cnt;
}
int n,f[N][2];
inline void dfs(register int u,register int fa)
{
f[u][1]=1;
f[u][0]=0;
for(register int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
if(v==fa)
continue;
dfs(v,u);
f[u][1]+=Min(f[v][0],f[v][1]);
f[u][0]+=f[v][1];
}
}
int main()
{
n=read();
for(register int i=1;i<n;++i)
{
int u=read(),v=read();
add(u,v),add(v,u);
}
dfs(1,0);
write(Min(f[1][0],f[1][1]));
return 0;
}

【题解】Luogu SP1435 PT07X - Vertex Cover的更多相关文章

  1. SPOJ PT07X Vertex Cover

    题目意思: 一棵树,找到最少的点能覆盖到所有的边,(也就是每条边俩端 至少有一个在你找到的集合): 解法:每条边只能被俩个点中的一个,或全部覆盖所以我们有树形DP来解: DP[num][flag]// ...

  2. URAL 2038 Minimum Vertex Cover

    2038. Minimum Vertex Cover Time limit: 1.0 secondMemory limit: 64 MB A vertex cover of a graph is a ...

  3. SCU 4439 Vertex Cover|最小点覆盖

    传送门 Vertex Cover frog has a graph with n vertices v(1),v(2),…,v(n)v(1),v(2),…,v(n) and m edges (v(a1 ...

  4. 集合覆盖 顶点覆盖: set cover和vertex cover

    这里将讲解一下npc问题中set cover和vertex cover分别是什么. set cover: 问题定义: 实例:现在有一个集合A,其中包含了m个元素(注意,集合是无序的,并且包含的元素也是 ...

  5. PAT1134:Vertex Cover

    1134. Vertex Cover (25) 时间限制 600 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A vertex ...

  6. A1134. Vertex Cover

    A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at le ...

  7. PAT A1134 Vertex Cover (25 分)——图遍历

    A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at le ...

  8. PAT 甲级 1134 Vertex Cover

    https://pintia.cn/problem-sets/994805342720868352/problems/994805346428633088 A vertex cover of a gr ...

  9. 二分图匹配 + 最小点覆盖 - Vertex Cover

    Vertex Cover Problem's Link Mean: 给你一个无向图,让你给图中的结点染色,使得:每条边的两个顶点至少有一个顶点被染色.求最少的染色顶点数. analyse: 裸的最小点 ...

随机推荐

  1. 公司中springcloud项目遇到的问题

    1.更改maven的.m2下的settings.xml文件,程序就可以运行,是不是很神奇?

  2. elk-准备(一)

    一.在搭建elk之前需要做准备工作 1.创建elk用户 groupadd elk -g 1001 useradd elk -m -d /home/elk -s /bin/bash -g 1001 -u ...

  3. 如何查看.net framework 版本

    以windows 2016 standard版本为例 通过注册表查看,找到 .NET Framework 注册表信息所在的位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...

  4. JAVA 第四周学习总结

    20175303 2018-2019-2 <Java程序设计>第四周学习总结 教材学习内容总结 •用extends来定义一个类的子类. •Object类是所有类的祖先类. •如果子类和父类 ...

  5. 作业2:git使用

    作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 远端库地址:https://github.com/yellow ...

  6. ng2-table

    [转]https://github.com/valor-software/ng2-table  demo:http://valor-software.com/ng2-table/ ng2-table ...

  7. ASP.NET C# 如何在程序中控制IIS服务或应用程序池重启?

    停止IIS服务ServiceController sc = new ServiceController("iisadmin");if(sc.Status==ServiceContr ...

  8. vue中生成二维码

    <template> <div id="qrcode" ></div> </template> <script> imp ...

  9. Kafka实践1--Producer

    一.Kafka设计原理参考: http://blog.csdn.net/suifeng3051/article/details/48053965?locationNum=2 http://www.cn ...

  10. python 转换容量单位 实现ls -h功能

    功能1 把字节转换自适应转为其他单位(ls -h),超过1024投入高一级的区间,不足1024投入本级区间,如1000K是一个合理值,1030K就应该转换为1M,2050K应该转换为2M 功能2 把其 ...