首页 > 其他分享 >P4395 [BOI2003]Gem 气垫车

P4395 [BOI2003]Gem 气垫车

时间:2023-03-06 17:24:58浏览次数:39  
标签:int add 权值 BOI2003 inf P4395 Gem

给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数

唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小。

 

考虑 j 为权值, 这个值不是1,2,但有个上界 logn  ,ORZ

F[u][ j ] += min(F[y][k])

 

#include <bits/stdc++.h>
using namespace std ;
  const int N=1e5+2,inf=0x3f3f3f3f;
 int f[N][19],n;
 int go[N<<1],nxt[N<<1],hd[N],all;
 
 void add(int x,int y){
 	go[++all]=y,nxt[all]=hd[x],hd[x]=all;
 }
 
 void dp(int x,int last){
 	int i,j,k,y,t;
 	for(i=1;i<=15;i++) f[x][i]=i;
 	
 	for(i=hd[x];i;i=nxt[i]){
 		y=go[i]; if(y==last) continue; dp(y,x);
 		
 		for(j=1;j<=15;j++){
			t=inf;
			for(k=1;k<=15;k++) if(j!=k) t=min(t,f[y][k]);
			f[x][j]+=t;
		}
 	}
 }
 signed main(){
 	int i,x,y;
 	 cin>>n;
 	 for(i=1;i<n;i++) cin>>x>>y,add(x,y),add(y,x);
 	 dp(1,0);
 	 x=inf; for(i=1;i<=15;i++) x=min(x,f[1][i]);
 	 cout<<x;
 }
 
 
 

 

 

标签:int,add,权值,BOI2003,inf,P4395,Gem
From: https://www.cnblogs.com/towboa/p/17184611.html

相关文章