为什么会错???
查看原帖
为什么会错???
348511
原子げんし楼主2021/8/11 18:17

看了题解后才写的 20pts求助

#include <bits/stdc++.h>
using namespace std;
vector <pair <int,int> > g[410];
int dp[410][410][10];
int N,M,K; 
void dfs(int x,int pre) {
	dp[x][0][0]=dp[x][1][1]=0;
	for(int i=0;i<g[x].size();i++) {
		int nx=g[x][i].first; int cost=g[x][i].second;
		if(nx==pre) continue;
		dfs(nx,x);
		for(int node=K;node>=0;node--) {
			for(int bit=0;bit<2;bit++) {
				dp[x][node][bit]+=dp[x][0][0]+cost*(bit==0&&K==2);
				for(int pnode=0;pnode<=node;pnode++) {
					dp[x][node][bit]=min(dp[x][node-pnode][bit]+min(dp[nx][pnode][bit^1],dp[nx][pnode][bit]+(M==2||bit==1)*cost),dp[x][node][bit]);
				}
			}
		}
	}
}
int main() {
//	freopen("Isolation.in",r,stdin);
//	freopen("Isolation.out",w,stdout);
	memset(dp,63,sizeof dp);
	cin>>N>>M>>K;
	if(M-1>N-K) {
		puts("-1"); return 0;
	}
	for(int i=0;i<N-1;i++) {
		int x,y,z; cin>>x>>y>>z;
		x--; y--;
		g[x].push_back({y,z});
		g[y].push_back({x,z});
	}
	dfs(0,-1);
	cout<<dp[0][K][0]<<endl;
	return 0;
}

2021/8/11 18:17
加载中...