https://codeforces.com/contest/1521/problem/D


思路:

把树上的单链初始时每个点是一个链。然后类似树形dp递归。递归过程中模拟链的断开,拼凑新的链头链尾。

代码比较清晰

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=1e5+1000;
typedef int LL;
typedef pair<LL,LL>P;
inline LL read(){LL x=0,f=1;char ch=getchar();   while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
LL hd[maxn],tl[maxn];
bool vis[maxn];
vector<LL>g[maxn];
vector<P>ans1,ans2;///断边和连边
void dfs(LL u,LL fa){for(LL i=0;i<g[u].size();i++){LL v=g[u][i];if(v==fa) continue;dfs(v,u);///搜到底if(hd[v]==v){if(tl[u]==u){tl[u]=tl[v];vis[v]=1;}else if(hd[u]==u){hd[u]=tl[v];vis[v]=1;}}}for(LL i=0;i<g[u].size();i++){LL v=g[u][i];if(vis[v]||v==fa) continue;vis[v]=true;ans1.push_back({u,v});ans2.push_back({tl[u],hd[v]});tl[u]=tl[v];}
}
int main(void){LL T;T=read();while(T--){LL n;n=read();for(LL i=0;i<=n+10;i++){vis[i]=0;g[i].clear();ans1.clear();ans2.clear();hd[i]=tl[i]=i;}for(LL i=1;i<n;i++){LL u,v;u=read();v=read();g[u].push_back(v);g[v].push_back(u);}dfs(1,0);///找一个单度数的点当根开始也可以printf("%d\n",ans1.size());for(LL i=0;i<ans1.size();i++){printf("%d %d %d %d\n",ans1[i].first,ans1[i].second,ans2[i].first,ans2[i].second);}}return 0;
}

D. Nastia Plays with a Tree(树形dp)相关推荐

  1. 2021牛客多校4 - Rebuild Tree(树形dp)

    题目链接:点击查看 题目大意:给出一棵 nnn 个节点的树,现在可以删掉 kkk 条边,然后加上 kkk 条边,问有多少种方案使得操作后 nnn 个点仍然是一棵树 题目分析:原树删掉 kkk 条边后会 ...

  2. hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)

    题目链接: Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: ...

  3. HDU 5834 Magic boy Bi Luo with his excited tree 树形DP

    Magic boy Bi Luo with his excited tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5834 Descript ...

  4. BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)

    BZOJ orz MilkyWay天天做sxt! 首先可以树形DP:\(f[i][j][0/1]\)表示\(i\)个点的子树中,黑高度为\(j\),根节点为红/黑节点的最小红节点数(最大同理). 转移 ...

  5. LiberOJ #6210. 「美团 CodeM 决赛」tree 树形DP

    题目链接:点这里 题解: 需要证明,所求的路径一定是全部权值都为1或者,路径上权值至多有一个为2其余为1且权值2在路径中央. 然后树形DP 设定dp[i][0/1] 以1为根的情况下,以i 节点下子树 ...

  6. Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp

    链接: http://codeforces.com/contest/462/problem/D 题意: 给定n个点的树, 0为根,下面n-1行表示每个点的父节点 最后一行n个数 表示每个点的颜色,0为 ...

  7. VK Cup 2012 Round 1 D. Distance in Tree (树形dp)

    题目:http://codeforces.com/problemset/problem/161/D 题意:给你一棵树,问你两点之间的距离正好等于k的有多少个 思路:这个题目的内存限制首先大一倍,他有5 ...

  8. ARC101E Ribbons on Tree 树形dp 容斥

    题目链接 题意: 给你一棵nnn个点的树,nnn是偶数,把这些点分成n2\frac{n}{2}2n​个点对,每个点对会把路径上的所有边覆盖,问你每条边至少覆盖一次有多少种配对方式.n<=5000 ...

  9. A. Parsa‘s Humongous Tree(树形DP + 贪心)

    Problem - 1528A - Codeforces 两个玩家正在玩一个游戏.他们有一个整数1,2,...,n的排列组合(排列组合是一个数组,其中从1到n的每个元素正好出现一次).这个排列组合没有 ...

最新文章

  1. 成功当选2014年度MVP
  2. 7 centos 修改磁盘uuid_Centos7修改分区空间
  3. python元类使用场景_Python元类使用简介
  4. Canvas 通过改变渐变色渐变百分比位置做飞线效果
  5. ASP.NET CORE的H5上传
  6. PHP正则表达式的快速学习方法
  7. 2020android加固,360加固2020最新脱壳全套图文教程-一一网络
  8. 制作业信息化为什么难施行?
  9. 百度网盘视频加速播放
  10. 2022 抖音记录美好生活
  11. lvgl chart
  12. ORAN专题系列-21:主要的玩家(设备商)以及他们各自的态度、擅长领域
  13. telegram自动发信息_创建telegram 机器人 并发送消息
  14. 中学生计算机制作大赛,【崇德尚学 和雅金中】热烈祝贺金沙中学在2019年南海区中学生电脑制作活动中硕果累累!...
  15. python打开网址搜索关键字_Python实验:百度搜索关键字自动打开相关URL
  16. mac 环境下 登陆失败问题Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  17. LOJ #3103. 「JSOI2019」节日庆典
  18. 三款Zookeeper可视化工具、ZooInspector、prettyZoo、ZooKeeperAssistant
  19. 华为鸿蒙仿安卓,华为鸿蒙负责人:我们不是做一个安卓的替代品
  20. Leetcode刷题java之121买股票的最佳时机

热门文章

  1. 纯CSS实现圆角阴影的折角效果
  2. crmeb多商户系统安装(1)
  3. Python实现数据分析(八)数据清洗(DataClean)
  4. 信创操作系统--统信UOS桌面版(使用终端:bash、tty、基本shell操作)
  5. 探索 TDengine在《图码联侦》项目中的应用可行性及实践研究
  6. JAVA-多线程 三 {多线程状态}JAVA从基础开始 -- 3
  7. Qt焦点事件 setFocusPolicy
  8. 常用颜色RGB、灰度值
  9. 克隆好的CentOS6虚拟机如何联网,解决报错Device eth0 does not seem to be present, delaying initialization
  10. mybatis-sqlserver批量新增返回id