设f[i][j]表示以i为根的子树,i与父亲之间的边染成j的最小代价

DP的过程中转移时相当于求一个最小权匹配,用费用流即可

感觉复杂度飞起来了…

#include<cstdio>
const int inf=~0U>>2,N=30000,M=1000110,MAXN=160;
int n,x,y,i,j;
int u[M],v[M],c[M],co[M],nxt[M],t,S,T,l,r,q[M],g[N],f[N],d[N];bool in[N];
int G[MAXN],NXT[MAXN<<1],V[MAXN<<1],ed,dp[MAXN][MAXN];
inline void ADD(int x,int y){V[++ed]=y;NXT[ed]=G[x];G[x]=ed;}
inline void add(int x,int y,int z,int zo){
u[++t]=x;v[t]=y;c[t]=z;co[t]=zo;nxt[t]=g[x];g[x]=t;
u[++t]=y;v[t]=x;c[t]=0;co[t]=-zo;nxt[t]=g[y];g[y]=t;
}
inline bool spfa(){
int x,i;
for(i=1;i<=T;i++)d[i]=inf;
d[S]=0;in[S]=1;l=r=M>>1;q[l]=S;
while(l<=r){
int x=q[l++];
if(x==T)continue;
for(i=g[x];i;i=nxt[i])if(c[i]&&co[i]+d[x]<d[v[i]]){
d[v[i]]=co[i]+d[x];f[v[i]]=i;
if(!in[v[i]]){
in[v[i]]=1;
if(d[v[i]]<d[q[l]])q[--l]=v[i];else q[++r]=v[i];
}
}
in[x]=0;
}
return d[T]<inf;
}
void solve(int x,int pre){
int i,j,k,now,cnt=0;
for(i=G[x];i;i=NXT[i])if(V[i]!=pre)solve(V[i],x),cnt++;
if(x==1){
if(!cnt)return;
t=1;S=0;T=n*(cnt+1);
for(i=0;i<=T;i++)g[i]=in[i]=0;
for(j=1;j<n;j++)add(j,T,j!=now,0);
for(j=n-1,i=G[x];i;j+=n-1,i=NXT[i])if(V[i]!=pre)for(add(S,++j,1,0),k=1;k<n;k++)add(j,j+k,1,dp[V[i]][k]),add(j+k,k,1,0);
while(spfa())for(i=T;i!=S;i=u[f[i]])--c[f[i]],++c[f[i]^1],dp[x][0]+=co[f[i]];
}else for(now=1;now<n;now++){
dp[x][now]=now;
if(!cnt)continue;
t=1;S=0;T=n*(cnt+1);
for(i=0;i<=T;i++)g[i]=in[i]=0;
for(j=1;j<n;j++)add(j,T,j!=now,0);
for(j=n-1,i=G[x];i;j+=n-1,i=NXT[i])if(V[i]!=pre)for(add(S,++j,1,0),k=1;k<n;k++)add(j,j+k,1,dp[V[i]][k]),add(j+k,k,1,0);
while(spfa())for(i=T;i!=S;i=u[f[i]])--c[f[i]],++c[f[i]^1],dp[x][now]+=co[f[i]];
}
}
int main(){
scanf("%d",&n);
for(i=1;i<n;i++)scanf("%d%d",&x,&y),ADD(x,y),ADD(y,x);
solve(1,0);
return printf("%d",dp[1][0]),0;
}

  

BZOJ3742 : Painting的更多相关文章

  1. CF448C Painting Fence (分治递归)

    Codeforces Round #256 (Div. 2) C C. Painting Fence time limit per test 1 second memory limit per tes ...

  2. [译]使用Continuous painting mode来分析页面的绘制状态

    Chrome Canary(Chrome “金丝雀版本”)目前已经支持Continuous painting mode,用于分析页面性能.这篇文章将会介绍怎么才能页面在绘制过程中找到问题和怎么利用这个 ...

  3. Codeforces Round #353 (Div. 2)Restoring Painting

    Vasya works as a watchman in the gallery. Unfortunately, one of the most expensive paintings was sto ...

  4. hdu-4810 Wall Painting(组合数学)

    题目链接: Wall Painting Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  5. Codeforces Gym 100342C Problem C. Painting Cottages 转化题意

    Problem C. Painting CottagesTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...

  6. F面经:painting house

    There are a row of houses, each house can be painted with three colors red, blue and green. The cost ...

  7. HDU 3685 Rotational Painting(多边形质心+凸包)(2010 Asia Hangzhou Regional Contest)

    Problem Description Josh Lyman is a gifted painter. One of his great works is a glass painting. He c ...

  8. HDU 4810 Wall Painting

    Wall Painting Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. UVA 253 Cube painting(暴力打表)

    Cube painting Problem Description: We have a machine for painting cubes. It is supplied with three d ...

随机推荐

  1. linux 查看系统信息命令(比较全)

    linux 查看系统信息命令是linux初学者必备的基础知识, 这些命令也非常有用, 因为进入linux第一件事就可能是首先查看系统信息, 因此必要的系统的学习一下这些linux系统信息命令还是非常有 ...

  2. 坚持不懈之linux haproxy 配置文件 详情

    ####################全局配置信息######################## #######参数是进程级的,通常和操作系统(OS)相关######### global maxc ...

  3. 二模 06day2

    很长时间没更新有意义的题目了呢,这是一套题撒,于是乎我便开心的边刷题边发题解了撒. 第一题: interval 比较好玩的一题撒, 分分钟过了, 就是模拟贪吃蛇但是没有食物(嗯,只要你判断冲突). 整 ...

  4. 利用nginx泛域名解析配置二级域名和多域名

    利用nginx泛域名解析配置二级域名和多域名 网站的目录结构为 html ├── bbs └── www html为nginx的安装目录下默认的存放源代码的路径. bbs为论坛程序源代码路径 www为 ...

  5. RAID阵列的初始化与管理

    如果我们创建RAID阵列的目的是新部署一台服务器,我们建议所有新创建的RAID阵列都应该做初始化操作,这样,硬盘上原有的用户数据将被清除,以便进行后续的系统,软件安装. 转自: http://zh.c ...

  6. FireFox下上传控件的显示问题

    Chrome正常 FireFox显示不正常 上传控件一直有个问题,就是样式问题,解决方法就是用一个大的背景层挡住,然后点大的背景层去触发上传控件的Click事件. Html: <span id= ...

  7. windows下的unix工具集:UnxUtils

    参考: http://blog.csdn.net/woohello/article/details/8365639 下载: http://sourceforge.net/projects/unxuti ...

  8. 【转】java反射详解

    转自:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ...

  9. 1.10 编程之美-双线程下载[double threads to download]

    [本文链接] http://www.cnblogs.com/hellogiser/p/double-threads-to-download-and-write.html [题目] 网络上下载数据,然后 ...

  10. iOS 用CALayer实现动画

    与动画有关的几个类的继承关系 涉及到动画的类主要有6个,看一下它们的基本用途: 1. CAAnimation  动画基类 2. CAAnimationGroup 组合多个动画 3. CAPropert ...