Tree2cycle

dfs

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

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

注意本题要手动扩栈

 #pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c++交
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<queue>
#include<stack>
#include<cmath>
#include<algorithm>
#include<vector>
#include<malloc.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
const int N=;
#define LL long long
const double eps = 1e-;
const double pi = acos(-);
// inline int r(){
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
// return x*f;
// }
vector<int>g[];
int ans;
int vis[];
int dfs(int u){
int num=;
vis[u]=true;
for(int i=;i<g[u].size();i++){
int v=g[u][i];
if(vis[v]==){
num+=dfs(v);
}
}
if(num>=){
if(u==){
ans+=*(num-);
}
else
ans+=*(num-);
return ;
}
else
return ;
}
int main(){
// freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--){
ans=;
int n;
clc(vis,);
scanf("%d",&n);
for(int i=;i<=n;i++) g[i].clear();
for(int i=;i<n-;i++){
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
int num=dfs();
printf("%d\n",++ans);
}
return ;
}

最新文章

  1. 特定IP访问远程桌面
  2. dos常用命令
  3. VI编辑器
  4. centos7的网络配置以及设置主机名和绑定IP的问题
  5. php规范
  6. Java中的volatile
  7. swift-01-利用元组判断字符串出现次数
  8. FFTW程序Demo
  9. Maven包装过程中跳过测试
  10. 使用Post方法模拟登陆爬取网页
  11. Struts配置的各种视图转发类型
  12. 毕业论文内容框架指导-适用于MIS系统
  13. HTML结构及基础语法
  14. 微信小程序开发用户授权登录
  15. Mac+Docker环境下xdebug的配置
  16. asp.net core 2.0 cookie的使用
  17. js prototype分析
  18. JMeter学习(三十六)发送HTTPS请求(转载)
  19. H5新增语义化标签
  20. ES6 学习笔记之三 函数参数默认值

热门文章

  1. PAT-乙级-1045. 快速排序(25)
  2. 团体程序设计天梯赛-练习集L2-010. 排座位
  3. Scala的Pattern Matching Anonymous Functions
  4. c/c++强制类型转换
  5. Firefly Http通信简单介绍
  6. URAL 1260 Nudnik Photographer(递推)
  7. CodeForces 299A Ksusha and Array
  8. PreparedStatement是如何大幅度提高性能的
  9. 李洪强漫谈iOS开发[C语言-011] - C语言标示符
  10. POJ2993——Help Me with the Game(字符串处理+排序)