zoukankan      html  css  js  c++  java
  • POJ

    Rebuilding Roads

    Description

    The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1..N) after the terrible earthquake last May. The cows didn't have time to rebuild any extra roads, so now there is exactly one way to get from any given barn to any other barn. Thus, the farm transportation system can be represented as a tree. 

    Farmer John wants to know how much damage another earthquake could do. He wants to know the minimum number of roads whose destruction would isolate a subtree of exactly P (1 <= P <= N) barns from the rest of the barns.

    Input

    * Line 1: Two integers, N and P 

    * Lines 2..N: N-1 lines, each with two integers I and J. Node I is node J's parent in the tree of roads. 

    Output

    A single line containing the integer that is the minimum number of roads that need to be destroyed for a subtree of P nodes to be isolated. 

    Sample Input

    11 6

    1 2

    1 3

    1 4

    1 5

    2 6

    #include<string.h>
    #include<stdio.h>
    #include<algorithm>
    #include<vector>
    using namespace std;
    int MAX=10000;
    vector<int> tree[160]; 
    int a,b,n,p,dp[160][160];
    bool son[160];
    void dfs(int root)
    {
    	int len=tree[root].size();
    	for(int i=0;i<len;i++)
    	{
    		dfs(tree[root][i]);
    		for(int j=p;j>1;j--)
    			for(int k=1;k<j;k++)
    				dp[root][j]=min(dp[root][j],dp[root][j-k]+dp[tree[root][i]][k]-2);
    	}
    }
    int main()
    {
    	scanf("%d%d",&n,&p);
    	memset(son,false,sizeof(son));
    	for(int i=0;i<n-1;i++)
    	{
    		scanf("%d%d",&a,&b);
    		tree[a].push_back(b);
    		son[b]=true;
    	}
    	int root=1;
    	while(son[root])root++;
    	for(int i=1;i<=n;i++)
    	{
    		dp[i][1]=tree[i].size()+1;
    		for(int j=2;j<=p;j++)
    			dp[i][j]=MAX;
    	}
    	dfs(root);
    	dp[root][p]--;
    	int ans=MAX;
    	for(int i=1;i<=n;i++)
    		ans=min(ans,dp[i][p]);
    	printf("%d
    ",ans);
    	return 0;
    }
    

      

    2 7

    2 8

    4 9

    4 10

    4 11

    Sample Output

    2

    Hint

    [A subtree with nodes (1, 2, 3, 6, 7, 8) will become isolated if roads 1-4 and 1-5 are destroyed.] 

  • 相关阅读:
    windows下虚拟环境安装方法
    用python 将 pymysql操作封装成类
    通过python的logging模块输出日志文件
    详细User-Agent大全
    多个结果显示成一个group_concat函数
    pytest 失败用例重试
    Python selenium 三种等待方式详解
    自定义列标题 case when
    查询结果多个合并一个GROUP_CONCAT(EmployeeName)
    win7_32虚拟机网络设置
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7057743.html
Copyright © 2011-2022 走看看