[BOI2003]Gem 氣墊車

題目鏈接:[BOI2003]Gem 氣墊車


顯然總顏色數不會太多,隨便設置個上線暴力dp即可。

轉移的時候可以前綴和優化一下。


AC代碼:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e4+10;
int n,dp[N][20],mi[20],res=1e9;
vector<int> g[N];
inline void add(int a,int b){g[a].push_back(b),g[b].push_back(a);}
void dfs(int x,int fa){
	for(int i=1;i<=15;i++)	dp[x][i]=i;
	for(int to:g[x])	if(to!=fa){
		dfs(to,x);	mi[16]=1e9; int tmp=1e9;
		for(int j=15;j>=1;j--)	mi[j]=min(mi[j+1],dp[to][j]);
		for(int j=1;j<=15;j++){
			if(j!=1)	tmp=min(tmp,dp[to][j-1]);
			dp[x][j]+=min(tmp,mi[j+1]);
		}
	}
}
signed main(){
	cin>>n;
	for(int i=1,a,b;i<n;i++)	scanf("%d %d",&a,&b),add(a,b);
	dfs(1,0);
	for(int i=1;i<=15;i++)	res=min(res,dp[1][i]);
	cout<<res;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章