bzoj 1907 树的路径覆盖 [贪心] [树的最小路径覆盖]

原创 2016年08月29日 21:01:32

这里写图片描述


这道题贪心DP都可以做,但是贪心的正确性容易证明,因为子树合并一定不会劣与合并,那么我就贪心了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<string>
#include<iomanip>
#include<ctime>
#include<climits>
#include<cctype>
#include<algorithm>
#ifdef WIN32
#define AUTO "%I64d"
#else
#define AUTO "%lld"
#endif
using namespace std;
#define smax(x,tmp) x=max((x),(tmp))
#define smin(x,tmp) x=min((x),(tmp))
#define maxx(x1,x2,x3) max(max(x1,x2),x3)
#define minn(x1,x2,x3) min(min(x1,x2),x3)
const int INF=0x3f3f3f3f;
const int maxn = 10005;
struct Edge
{
    int to,next;
}edge[maxn<<1];
int head[maxn];
int maxedge;
inline void addedge(int u,int v)
{
    edge[++maxedge] = (Edge) { v,head[u] };
    head[u] = maxedge;
    edge[++maxedge] = (Edge) { u,head[v] };
    head[v] = maxedge;
}
int n;
inline void init()
{
    scanf("%d",&n);
    memset(head,-1,sizeof(head));
    maxedge=-1;
    for(int i=1;i<n;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        addedge(u,v);
    }
}
int f[maxn];
bool flag[maxn];
void dfs(int u,int father)
{
    int cnt=0;
    f[u]=1;
    for(int i=head[u];~i;i=edge[i].next)
    {
        int v=edge[i].to;
        if(v==father) continue;
        dfs(v,u);
        f[u]+=f[v];
        if(!flag[v]) cnt++;
    }
    if(cnt>=2) f[u]-=2,flag[u]=true;
    else if(cnt==1) f[u]-=1;
}
int main()
{
#ifndef ONLINE_JUDGE
    freopen("road.in","r",stdin);
    freopen("road.out","w",stdout);
#endif
    int cas;
    scanf("%d",&cas);
    while(cas--)
    {
        init();
        memset(flag,0,sizeof(flag));
        dfs((n+1)>>1,-1);
        printf("%d\n",f[(n+1)>>1]);
    }
    return 0;
}
版权声明:S'il vous plait.

[BZOJ1907]树的路径覆盖(贪心||树形dp)

Being yourself is an honor, because nobody else can be you. 做自己是一种荣耀,因为没有任何人能成为你。...
  • Clove_unique
  • Clove_unique
  • 2016年10月03日 09:24
  • 559

bzoj 1907: 树的路径覆盖

Description Input Output Sample Input 1 7 1 2 2 3 2 4 4 6 5 6 6 7 Sample O...
  • lqybzx
  • lqybzx
  • 2015年02月23日 19:20
  • 729

【bzoj1907】树的路径覆盖

DescriptionInputOutput Sample Input171 22 32 44 65 66 7 Sample Output3 HINT ,注意此注释有误,第二种情况应该为{...
  • w_yqts
  • w_yqts
  • 2017年07月26日 19:00
  • 85

BZOJ1907 树的路径覆盖

考虑树DP,DP每个子树内的最小路径覆盖,注意到一个点有两种状态,一种是有两个儿子与他在同一条路径里,另一种是没有两个儿子与他在同一条路径里,第一种情况这个点不能与他的父亲相连,而第二种可以,所以我们...
  • neither_nor
  • neither_nor
  • 2016年08月16日 13:17
  • 283

BZOJ1907: 树的路径覆盖

BZOJ1907其实挺sbsb的一个树形dpdp。。我这种sbsb都会的树形dpdp。。 。。我的做法很鬼畜。 fx,0,fx,1f_{x,0},f_{x,1}分别表示点xx作为转折点(也就是连成...
  • Ep1C_HeReT1c
  • Ep1C_HeReT1c
  • 2017年06月08日 17:23
  • 199

bzoj题解

在大神基础上细化 1000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树定理,也可以通过推矩阵的递推关系得到递推式 1003:最短路+DP 1004:burnsi...
  • BOYxiejunBOY
  • BOYxiejunBOY
  • 2017年01月29日 19:22
  • 1070

BZOJ-3122-随机数生成器-SDOI2013-BSGS

描述分析 关键就是对式子的变形, 将原递推公式转化为通项公式, 中间会用到等比数列求和公式. 然后切记此时方程两边同乘(1-a), 然后就化简开了. 之后得到的式子是 a^(n-1) = ... (m...
  • qq_21110267
  • qq_21110267
  • 2015年03月20日 23:25
  • 1031

BZOJ1907: 树的路径覆盖 树形DP

1907: 树的路径覆盖 Time Limit: 5 Sec  Memory Limit: 259 MB Submit: 661  Solved: 299 [Submit][Status...
  • Oakley_
  • Oakley_
  • 2016年09月07日 08:16
  • 289

BZOJ 1907: 树的路径覆盖|贪心

来自大胆的yy:贪心随便构造出一种路径覆盖的情况都行,只要满足路径的端点所连的其他点不是其他路径的端点就行!!!#include #include #include #include #include...
  • ws_yzy
  • ws_yzy
  • 2016年02月03日 11:22
  • 474

[BZOJ3643]Phi的反函数(数学相关+搜索)

后来我们终于不再纠结一些事情,比如那个人到底有没有爱过自己,为什么相爱却没有在一起。曾经那些日思夜想无数次的暗下决心却无法解决的问题,可能在人生的某一刻却突然就能放手了,并且毫无留恋。这大概就是所谓的...
  • Clove_unique
  • Clove_unique
  • 2016年10月06日 16:40
  • 475
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bzoj 1907 树的路径覆盖 [贪心] [树的最小路径覆盖]
举报原因:
原因补充:

(最多只允许输入30个字)