http://codeforces.com/contest/1646/problem/D

在“好”点不能相邻的条件下,使“好”点的数量最多,典型树型DP。

在使“好”点的数量最多的条件下,使权重最小(非“好”点权重为1,“好”点权重为邻接点权重之和),也可按树型DP处理。

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;struct node
{int v,tp,next;
};node edge[2*maxn];
int first[maxn],dp1[maxn][2],dp2[maxn][2],val[maxn];
int n,num,ans1,ans2;void addedge(int u,int v)
{edge[num].v=v;edge[num].tp=-1;edge[num].next=first[u];first[u]=num++;
}void dfsI(int cur,int fa)
{int i,v;dp1[cur][1]=1;dp2[cur][0]=1;for(i=first[cur];i!=-1;i=edge[i].next){v=edge[i].v;if(v!=fa){dfsI(v,cur);dp1[cur][1]+=dp1[v][0];dp2[cur][1]+=dp2[v][0]+1;if(dp1[v][0]>dp1[v][1]){dp1[cur][0]+=dp1[v][0];dp2[cur][0]+=dp2[v][0];edge[i].tp=0;}else if(dp1[v][0]<dp1[v][1]){dp1[cur][0]+=dp1[v][1];dp2[cur][0]+=dp2[v][1]+1;edge[i].tp=1;}else if(dp2[v][0]<dp2[v][1]+1){dp1[cur][0]+=dp1[v][0];dp2[cur][0]+=dp2[v][0];edge[i].tp=0;}else{dp1[cur][0]+=dp1[v][1];dp2[cur][0]+=dp2[v][1]+1;edge[i].tp=1;}}}
}void dfsII(int cur,int fa,int tp)
{int i,v;if(tp==0){val[cur]=1;}for(i=first[cur];i!=-1;i=edge[i].next){v=edge[i].v;if(v!=fa){if(tp==0){dfsII(v,cur,edge[i].tp);}else{dfsII(v,cur,0);}}}
}int main()
{int i,u,v;scanf("%d",&n);memset(first,-1,sizeof(first));num=0;for(i=1;i<=n-1;i++){scanf("%d%d",&u,&v);addedge(u,v);addedge(v,u);}if(n==2){printf("2 2\n1 1\n");}else{dfsI(1,0);if(dp1[1][0]>dp1[1][1]){ans1=dp1[1][0],ans2=dp2[1][0];dfsII(1,0,0);}else if(dp1[1][0]<dp1[1][1]){ans1=dp1[1][1],ans2=dp2[1][1];dfsII(1,0,1);}else if(dp2[1][0]<dp2[1][1]){ans1=dp1[1][0],ans2=dp2[1][0];dfsII(1,0,0);}else{ans1=dp1[1][1],ans2=dp2[1][1];dfsII(1,0,1);}for(u=1;u<=n;u++){if(val[u]){continue;}for(i=first[u];i!=-1;i=edge[i].next){v=edge[i].v;val[u]+=val[v];}}printf("%d %d\n",ans1,ans2);for(i=1;i<=n;i++){printf("%d ",val[i]);}printf("\n");}return 0;
}

Weight the Tree CodeForces - 1646D相关推荐

  1. NYOJ 679 The Weight of Tree 搜索+dp+邻接表

    The Weight of Tree 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 456 has a tree of n nodes, each node is as ...

  2. CF 1646D Weight the Tree 树形dp

    题目链接 这道题拖了很长时间才去补,今天想起来做这道题 这道题的题意是可以组成合法的点互不相邻,我的思路没有错误,但是赛时没有写出代码,现在想想也觉得可惜,我要是多想到一个度的条件,赛时可能就会过了o ...

  3. [树形dp]Weight the Tree Codeforces1646D

    You are given a tree of nn vertices numbered from 11 to nn. A tree is a connected undirected graph w ...

  4. 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)

    励志用少的代码做高效表达 Problem describe Programmer Rostislav got seriously interested in the Link/Cut Tree dat ...

  5. Appleman and Tree CodeForces - 461B(树形dp)

    Appleman has a tree with n vertices. Some of the vertices (at least one) are colored black and other ...

  6. Paint the Tree CodeForces - 1244D(看似是树,其实是条链)

    目录 题目 官方题解: 百度翻译 题解 ac代码 题目 给多组两顶点连接,得到的图任意三个顶点都是不同的颜色,,给出各顶点染三种颜色的花费,问各店如何染,满足条件情况下,使得花费最少: You are ...

  7. 【CF1646D】D. Weight the Tree(树形dp、贪心)

    加权树 题意: 给定一颗树,让你给树上的点赋予权值.定义一个点的权值等于其所有相邻节点的权重之和时,这个点就是 good. 你需要找到一种赋值方法,使得树中 good 点数最多,同时所有顶点的权重总和 ...

  8. Codeforces Round #595 (Div. 3) F. Maximum Weight Subset 树形dp

    传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 明显的树形dpdpdp,所以考虑一下dpdpdp状态. 这个题状态挺神的..可能是因为我太菜了,看了半天才看懂. ...

  9. Codeforces Round #633 B. Edge Weight Assignment 结论题 + dp

    传送门 文章目录 题意: 思路: 题意: 思路: 首先考虑最小值,如果从一个叶子结点出发到任意叶子的距离都为偶数,那么只需要一个值就可以满足条件.如果有奇数的,考虑111 ^ 222 ^ 3=03=0 ...

最新文章

  1. Google Mock(Gmock)简单使用和源码分析——源码分析
  2. 中国电子学会图形化四级编程题:绳子算法
  3. 线程同步——内核对象实现线程同步——等待函数
  4. 钉钉接入access_无需开发,IT事件接入钉钉的方法详解
  5. VC窗口形状的绘制---SetWindowRgn
  6. c语言 如何创建adt_编程那些事儿:面向对象编程基石之数据抽象(ADT)
  7. 修改GIT的user.name和user.email
  8. NeurIPS2021 VALUE:快来刷榜吧!微软提出视频多模态新基准,同时含检索、caption、QA等多个任务!...
  9. 切换图片 ImageSwitcher
  10. Jquery 选择器 特殊字符 转义字符
  11. Tomcat日志配置
  12. js批量创建钱包地址并保存私钥
  13. 硬件工程师的真实前途我说出来可能你们不信
  14. ElasticSearch三种分页方式以及各优缺点(一文知道如何抉择)
  15. 【计组5.5】指令流水线
  16. matlab实现lzw编码,LZW编码算法matlab实现
  17. 奔向太空,我们是认真的!国产操作系统飞天记。
  18. ewebeditor文件上传漏洞2.8.0版本(漏洞复现)
  19. C语言中的char用法
  20. 隐藏和显示Lion系统文件夹

热门文章

  1. arduino低功耗模式_一起来看看新推出的Arduino开发板MKR WAN 1310
  2. python预测股票 keras_使用LSTM模型预测股价基于Keras
  3. KNIME + Python = 数据分析+报表全流程
  4. 如何修改win7上的mac地址
  5. Python 常用的标准库以及第三方库有哪些?
  6. 老员工的工资为什么会倒挂?
  7. (已更新)全新商城微信小程序源码支持对接公众号
  8. 求出1-n之间的素数(质数)
  9. 表单二维码怎么做?二维码怎么统计信息?
  10. eBPF/XDP实现防火墙功能