bzoj 1369(树形dp)
来源:互联网 发布:网络热门微拍百度云 编辑:程序博客网 时间:2024/05/16 18:32
传送门
(网上有人)可以证明按题意染色一棵树需要的颜色种数不超过logn。然后O(logn^2)dp即可。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=1e4+2,INF=0x3f3f3f3f;int head[MAXN],edge=0;struct EDGE { int v,nxt;}e[MAXN<<1];int n,dp[15][MAXN],ans=INF;inline int read() { int x=0;char c=getchar(); while (c<'0'||c>'9') c=getchar(); while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x;}inline void adde(int u,int v) { e[edge].nxt=head[u],e[edge].v=v,head[u]=edge++; e[edge].nxt=head[v],e[edge].v=u,head[v]=edge++; }void dfs(int p,int fa) { for (int i=1;i<=14;++i) dp[i][p]=i; for (int i=head[p];~i;i=e[i].nxt) { int v=e[i].v; if (v^fa) { dfs(v,p); for (int j=1;j<=14;++j) { int temp=INF; for (int k=1;k<=14;++k) if (j^k) temp=min(temp,dp[k][v]); dp[j][p]+=temp; } } }}int main() { memset(head,-1,sizeof(head)); n=read(); for (int i=1;i<n;++i) { int u=read(),v=read(); adde(u,v); } dfs(1,0); for (int i=1;i<=14;++i) ans=min(ans,dp[i][1]); printf("%d\n",ans); return 0;}
阅读全文
0 0
- bzoj 1369(树形dp)
- BZOJ 1369 树形DP
- bzoj 1040(树形DP)
- bzoj 2060(树形DP)
- bzoj 1907(树形dp)
- bzoj 1060(树形dp)
- bzoj 1131(树形dp)
- bzoj 1304(树形dp)
- bzoj 4726(树形dp)
- bzoj 1596(树形dp)
- 【BZOJ】1369: [Baltic2003]Gem 树形dp
- BZOJ-3227 红黑树(tree) 树形DP
- bzoj 1131: [POI2008]Sta(树形DP)
- bzoj 2196 Computer(树形DP)
- bzoj 4033: [HAOI2015]T1(树形DP)
- 【bzoj 1812】[Ioi2005]riv(树形dp)
- BZOJ 1040-骑士(环套树+树形DP)
- BZOJ 2152 (树形DP)
- WEB_01_HTML表单_第二讲
- 20170925-浅谈第二阶段Javaweb的学习以及两次公司笔试面试的经验(二)
- ImportError: /usr/local/lib/python2.7/dist-packages/torch/lib/libgomp.so.1: version `GOMP_4.0' not f
- 商务礼仪对谈判的重要性
- SQL注入原理总结
- bzoj 1369(树形dp)
- 精确度,召回率,真阳性,假阳性
- bigdecimal去除末尾多余的0 ,stripTrailingZeros()科学计数法解决
- Android values文件夹适配屏幕
- Java常见集合框架(三):List之List、AbstractList 、ArrayList
- 如何从零开始搭建高性能直播平台?
- exe 32 or 64
- MySQL day6---自定义函数
- shell的种类