Tree2cycle

dfs

不是根节点:如果边数大于等于2,则删除与父节点的边。并且是一条环,那么每个点的度数是2,则还要删除num(每个节点儿子数)-2,只留两个儿子。当然删除边的儿子也要连到环上,又是一个num(每个节点儿子数)-2次操作。最后不同分支之间还要连一条边。所以复杂度为:2*(num-1)。

根:不用删父亲边和连分支边。2*(num-2)

注意本题要手动扩栈

 1 #pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c++交
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<iostream>
 6 #include<queue>
 7 #include<stack>
 8 #include<cmath>
 9 #include<algorithm>
10 #include<vector>
11 #include<malloc.h>
12 using namespace std;
13 #define clc(a,b) memset(a,b,sizeof(a))
14 #define inf 0x3f3f3f3f
15 const int N=10010;
16 #define LL long long
17 const double eps = 1e-5;
18 const double pi = acos(-1);
19 // inline int r(){
20 //     int x=0,f=1;char ch=getchar();
21 //     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
22 //     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
23 //     return x*f;
24 // }
25 vector<int>g[1000010];
26 int ans;
27 int vis[1000010];
28 int dfs(int u){
29     int num=0;
30     vis[u]=true;
31     for(int i=0;i<g[u].size();i++){
32         int v=g[u][i];
33         if(vis[v]==0){
34             num+=dfs(v);
35         }
36     }
37     if(num>=2){
38         if(u==1){
39             ans+=2*(num-2);
40         }
41         else
42             ans+=2*(num-1);
43         return 0;
44     }
45     else
46         return 1;
47 }
48 int main(){
49     // freopen("in.txt","r",stdin);
50     int T;
51     scanf("%d",&T);
52     while(T--){
53         ans=0;
54         int n;
55         clc(vis,0);
56         scanf("%d",&n);
57         for(int i=0;i<=n;i++) g[i].clear();
58         for(int i=0;i<n-1;i++){
59             int u,v;
60             scanf("%d%d",&u,&v);
61             g[u].push_back(v);
62             g[v].push_back(u);
63         }
64         int num=dfs(1);
65         printf("%d\n",++ans);
66     }
67     return 0;
68 }

转载于:https://www.cnblogs.com/ITUPC/p/5426139.html

HDU 4714 Tree2cycle相关推荐

  1. HDU 4714 Tree2cycle:贪心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪 ...

  2. hdu 4714 树+DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 本来想直接求树的直径,再得出答案,后来发现是错的. 思路:任选一个点进行DFS,对于一棵以点u为 ...

  3. 动态规划总结与题目分类

    源博客链接:http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少 ...

  4. 『ACM-算法-动态规划』初识DP动态规划算法

    一.多阶段决策过程的最优化问题 在现实生活中,有类活 动的过程,由于 它的特殊性,可将过程分成若干个互相阶段.在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.当阶段决策的选取不是任意确 ...

  5. (转)dp动态规划分类详解

    dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...

  6. 《动态规划》— 动态规划分类

    动态规划(英语:Dynamic programming,DP)是一种在数学.计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划常常适用于有重叠子问题和最 ...

  7. 转:动态规划题目分类

    https://blog.csdn.net/cc_again/article/details/25866971 一.简单基础dp 这类dp主要是一些状态比较容易表示,转移方程比较好想,问题比较基本常见 ...

  8. 【DP专辑】ACM动态规划总结

    转载请注明出处,谢谢.   http://blog.csdn.net/cc_again?viewmode=list          ----------  Accagain  2014年5月15日 ...

  9. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

最新文章

  1. Spring Cloud Alibaba 系统保护 - 限流与熔断:Sentinel 在项目中的最佳实践
  2. inline-block元素出现位置错位的解决方法
  3. fft ocean注解
  4. 「Java Web」主页静态化的实现
  5. Ogre wiki 中级教程1 动画,点之间行走及四元数的基本应用
  6. Linux操作系统启动流程简单介绍
  7. 双曲函数奇偶性_基本初等函数之奇偶性(强基系列42)
  8. 在android中ScrollView嵌套ScrollView解决方案
  9. 【Drools一】值得打工人学习的规则引擎Drools
  10. STL : List使用时应注意的问题
  11. mesh 协调器 路由器_北京无线路由收发器C32MESH
  12. LIBAVCODEC_VERSION_INT是哪里定义的?
  13. java实现modbus rtu协议与 modscan等工具
  14. java火柴人吃豆豆,4399游戏火柴人吃豆豆全图文通关攻略分享
  15. cpu高对计算机有什么影响吗,电脑CPU性能高低有什么影响 怎么提高电脑CPU性能...
  16. 从键盘输入一个字符串a,并在串a中的最大元素后面插入字符串b(b[]=“ab”),输出字符串a。
  17. 用密钥激活win10显示无法连接到你的组织的激活服务器0xc004f074
  18. 悉尼大学商业数据科学与计算机学院,留学攻略—澳洲悉尼大学数据科学专业
  19. matlab 嵌套循环
  20. python实现K-means多维数据聚类代码

热门文章

  1. 手机长时间不用自动断网_不用蓝牙的感应音箱,只需百元!放上手机自动播放,媲美千元音质...
  2. 网络推广方法中浅谈网站中的内容如何优化好?
  3. 公司网络推广浅析网站想要“久居”首页的方法有哪些?
  4. gpu浮点计算能力floaps_聊聊 GPU 峰值计算能力
  5. vs mysql搭建_VS+mysql+EF搭建
  6. java接口是类型吗_JAVA中,接口到底是不是类
  7. 开发日记-20190627 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 4
  8. 【编程开发】Python隐藏属性——使用双下划线标识私有属性,外部不可直接访问...
  9. ES 断路器——本质上保护OOM提前抛出异常而已
  10. ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测...