[bzoj1369] [Baltic2003]Gem

  结论题。。。一棵树里用到的颜色数不超过logn。。

  f[i][j]表示以i为根的子树里,i的颜色是j的方案数。

  g[i][j]表示max{f[i][k]},(k!=j

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn=10233,inf=1e9+233;
 7 struct zs{int too,pre;}e[maxn<<1];int tot,last[maxn];
 8 int f[maxn][23],g[maxn][23];
 9 int i,j,k,n,m;
10
11 int ra;char rx;
12 inline int read(){
13     rx=getchar(),ra=0;
14     while(rx<‘0‘||rx>‘9‘)rx=getchar();
15     while(rx>=‘0‘&&rx<=‘9‘)ra*=10,ra+=rx-48,rx=getchar();return ra;
16 }
17
18 void dfs(int x,int fa){//printf("%d-->%d\n",fa,x);
19     int i,j,mn=0,nd=0;
20     for(i=last[x];i;i=e[i].pre)if(e[i].too!=fa){
21         dfs(e[i].too,x);
22         for(j=1;j<23;j++)f[x][j]+=g[e[i].too][j];
23     }
24     f[x][0]=inf;
25     for(i=1;i<23;i++){
26         f[x][i]+=i;
27         if(f[x][i]<f[x][mn])nd=mn,mn=i;
28         else if(f[x][i]<f[x][nd])nd=i;
29     }
30     for(i=1;i<23;i++)if(i!=mn)g[x][i]=f[x][mn];else g[x][i]=f[x][nd];
31 }
32 inline void insert(int a,int b){
33     e[++tot].too=b,e[tot].pre=last[a],last[a]=tot,
34     e[++tot].too=a,e[tot].pre=last[b],last[b]=tot;
35 }
36
37 int main(){
38     n=read();
39     for(i=1;i<n;i++)insert(read(),read());
40     dfs(1,0);
41     int ans=min(g[1][1],f[1][1]);
42     printf("%d\n",ans);
43     return 0;
44 }
45 

时间: 2024-10-18 09:36:34

[bzoj1369] [Baltic2003]Gem的相关文章

[bzoj1369][Baltic2003]Gem_树形dp_结论题

Gem bzoj-1369 Baltic-2003 题目大意:给你一棵树,让你往节点上添自然数,使得任意相邻节点的数不同且使得权值最小. 注释:n为结点个数,$1\le n\le 10^3$. 想法:呵呵,学长一直在骂结论题,我一直觉得没啥.. ... 知道tm碰见这玩意儿,卧槽?! 树上相邻节点不同色,颜色个数最小值至多为logn. 最后,附上丑陋的代码... ... #include <iostream> #include <cstring> #include <cstd

【BZOJ-1369】Gem 树形DP

1369: [Baltic2003]Gem Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 282  Solved: 180[Submit][Status][Discuss] Description 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. Input 先给出一个数字N,代表树上有N个点,N<=10000 下面N-1行,代表两个点相连 Out

Ruby gem 更换国内源

gem sources --add http://gems.ruby-china.org/ --remove https://rubygems.org/

Linux下使用gem安装软件时遇到的一些坑

来谈谈最近我在安装ruby的gem时遇到的一些坑. 首先选择的是下载下来后手动编译安装,这个流程按照官方指示的操作都没什么问题,但安装完之后,当准备使用gem安装一些软件时,总是会遇到找不到源这种坑爹的问题. 明明已经改过了: $ gem source -r https://rubygems.org/ $ gem source -a https://ruby.taobao.org/ 尝试多次后,我决定卸掉后重新安装. 这次安装方法采用ruby官方的指示: 安装rvm $ curl -L http

整理Ruby相关的各种概念(rvm, gem, bundle, rake, rails等)

转自:http://henter.me/post/ruby-rvm-gem-rake-bundle-rails.html Ruby 这个就不用多说了 RVM 用于帮你安装Ruby环境,帮你管理多个Ruby环境,帮你管理你开发的每个Ruby应用使用机器上哪个Ruby环境.Ruby环境不仅仅是Ruby本身,还包括依赖的第三方Ruby插件.都由RVM管理. Rails 这个也不用多说,著名开发框架.详细看 http://zh.wikipedia.org/wiki/Ruby_on_Rails RubyG

ruby 编译安装,gem国内源ruby.taobao.org

centos6.6final 一.安装依赖包(使用默认CENTOS更新源): # yum install openssl* openssl-devel zlib-devel gcc gcc-c++ make autoconf readline-devel curl-devel expat-devel gettext-devel 二.关闭iptables和SELINUX # service iptables stop # setenforce 0 # vi /etc/sysconfig/selin

rubygem 国内镜像 解决gem install rails 连接超时的问题

为什么有这个? 由于国内网络原因(你懂的),导致 rubygems.org 存放在 Amazon S3 上面的资源文件间歇性连接失败.所以你会与遇到 gem install rack或 bundle install 的时候半天没有响应,具体可以用 gem install rails -V 来查看执行过程. 这是一个完整 rubygems.org 镜像,你可以用此代替官方版本,同步频率目前为15分钟一次以保证尽量与官方服务同步. 如何使用? $ gem sources --remove https

安装Cocoapods, 更新gem出现的问题

我现在需要安装Cocoapods .gem的镜像一景更换为淘宝的了.执行sudo gem install cocoapods出现错误: ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/xcodeproj 我估计是gem版本没有更新.执行sudo gem update --system,又出现了错误 ERROR: While executing gem ... (Errno::EPER

快速建立一个gem

一.新建一个gem bundle gem gemName 二.修改gem里的.gemspec文件 s.summary = %q{TODO: Write a gem summary} s.description = %q{TODO: Write a gem description}把%q{}里的内容进行修改,改为总结和描述,.gemspec文件主要为生成的gem显示gem的信息 三.然后在lib里的.rb文件里写入要写的类和函数 四.gem build gemName.gemspec 五.rake