zoukankan      html  css  js  c++  java
  • HDU 4714 Tree2cycle(树型DP)

    解题思路:

    将一棵树变成一个环。假设一个结点的分叉数目大于等于2。则将它与父节点断开。而且断开子结点数目sum - 2条边,并再次连接sum-2个儿子形成一条直链然后这条游离链与还有一条游离链相连,共须要2*(sum-1)个操作,假设该结点为根结点,则一共须要2 * (sum - 2)种操作。

    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <vector>
    #include <queue>
    #include <stack>
    #pragma comment(linker,"/STACK:102400000,102400000")
    #define LL long long 
    using namespace std;
    const int MAXN = 1000000 + 10;
    int ans;
    vector<int>G[MAXN];
    int n;
    int dfs(int u, int pre)
    {
    	int sz = G[u].size();
    	int sum = 0;
    	for(int i=0;i<sz;i++)
    	{
    		int v = G[u][i];
    		if(v == pre) continue;
    		sum += dfs(v, u);
    	}
    	if(sum >= 2)
    	{
    		if(u == 1) ans += 2 * (sum - 2);
    		else ans += 2 * (sum - 1);
    		return 0;
    	}
    	return 1;
    }	
    int main()
    {
    	int T;
    	scanf("%d", &T);
    	while(T--)
    	{
    		scanf("%d", &n);
    		for(int i=0;i<=n;i++) G[i].clear();
    		ans = 0;
    		int u, v;
    		for(int i=1;i<n;i++)
    		{
    			scanf("%d%d", &u, &v);
    			G[u].push_back(v);
    			G[v].push_back(u);
    		}
    		dfs(1, -1);
    		printf("%d
    ", ans + 1);
    	}
    	return 0;
    }


  • 相关阅读:
    NSString+URLEncoding
    编码解码
    RESTful架构理解
    jvm调优
    java大数据处理调优
    SQL 优化
    正确处理下载文件时HTTP头的编码问题(Content-Disposition)
    Spring 多媒体(文件上传)支持
    mybatis类型转换
    log4j Spring aop 注解的日志管理
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6925878.html
Copyright © 2011-2022 走看看