3 条题解

  • 1
    @ 2023-8-8 14:45:53
    #include <iostream>
    
    #include <cstdio>
    
    #include <cmath>
    
    #include <algorithm>
    
    #include <stack>
    
    #include <queue>
    
    #include <map>
    
    #include <cstring>
    
    #include <iomanip>
    
    const int N = 1e3 + 10;
    
    using namespace std;
    
    const int INF = 0x3f3f3f3f;
    
    using namespace std;
    
    struct node 
    {
    	int data;
    	
    	int to;
    };
    int n , q , u , v , w ;
    
    int dp[N][N] , son[N];
    
    vector<node> vc[N];
    
    void dfs (int u , int fa)
    {
    	son[u] = 1;
    	
    	dp[u][1] = 0;
    	
    	for(int i = 0 ; i < vc[u].size() ; i++)
    	{
    		int v = vc[u][i].to;
    		
    		if(v ==fa)continue;
    		
    		dfs(v , u);
    		
    		son[u] += son[v];
    		
    		for(int j = son[u] ; j >= 1 ; j--)
    		{
    			for(int k = 1 ; k <= min( j - 1 , son[v]) ; k++)
    			{
    				dp[u][j] = max(dp[u][j] , dp[u][j-k] + dp[v][k] + vc[u][i].data);
    			}
    		}
    	}
    }
    
    int main()
    {
    	cin >> n >> q ;
    	
    	memset(dp , -INF , sizeof(dp));
    	
    	for(int i = 1 ; i < n ; i++)
    	{
    		cin >> u >> v >> w ;
    		
    		vc[u].push_back((node){w , v});
    		
    		vc[v].push_back((node){w , u});
    	}
    	
    	dfs( 1 , 0 );
    	
    	cout << dp[1][q + 1];
    	    
    	return 0;
    }
    

    信息

    ID
    472
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    123
    已通过
    41
    上传者