题目链接


题目大意:


解题思路:

  1. 启发性思考首先我们先图切成dfs树,然后给图一个稳定结构之后,我们就可以去构造了
  2. 对于每个点我们从第底端开始构造每次把每次点的儿子两两匹配,如果是奇数个儿子就把多出来的儿子和父亲匹配,这样自底向上去构造是最优的

AC code

#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 9;
const int maxn = 500010;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x) {x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args) {read(first);read(args...);
}
struct node {int nxt ,to;
}e[maxn];
int head[maxn],cnt = 0;//链式前向星存图
inline void add(int from, int to) {e[cnt] = {head[from],to};head[from] = cnt ++;
}
vector<pair<PII,int>> ans;
int fa[maxn];
bool vis[maxn], tag[maxn];
inline void dfs(int u, int f, int nxt) {// 传入u,父亲,和边的编号vis[u] = true;for(int i = head[u]; ~i; i = e[i].nxt) {int v = e[i].to;if(vis[v]) continue;dfs(v,u,i);}int odd = 0, last = -1;for(int i = head[u]; ~i; i = e[i].nxt) {int v = e[i].to;if(tag[i] || (i^1) == nxt) continue;// 先不访问父亲的边if(odd % 2) {ans.push_back({{e[last].to,u},v});tag[i] = tag[i^1] = 1;// 用过的边标记tag[last] = tag[last^1] = 1;odd = 0;} else last = i, odd ++;}if(odd % 2 && nxt != -1) {// 使用父亲的边ans.push_back({{f,u},e[last].to});tag[nxt] = tag[nxt^1] = 1;tag[last] = tag[last^1] = 1;}return;
}int main() {IOS;ms(head,-1);int n, m;cin >> n >> m;for(int i = 1; i <= m; ++ i) {int u, v;cin >> u >> v;add(u,v);add(v,u);}for(int i = 1; i <= n; ++ i)if(!vis[i])dfs(i,0,-1);cout << ans.size() << endl;for(auto it : ans)cout << it.first.first << " " << it.first.second << " " << it.second << endl;
}

图论 ---- 构造DFS树的思想 K - Boomerangs Gym - 102001K相关推荐

  1. 图论复习——dfs树,点双,边双,强连通分量

    知识点 dfs树 对一个图运行 dfs 算法,每个点uuu的父亲定义为第一次遍历uuu时的前驱结点,若无则为根. 无向图的 dfs树 没有横叉边. 有向图的 dfs树 横叉边方向唯一,总是从后访问的点 ...

  2. Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树

    传送门 文章目录 题意: 思路: 题意: 给你一颗nnn个点的图,每个点都有一个点权cic_ici​,要求你给每个边赋一个权值kik_iki​,要求对于每个点与他相连的边的权值之和等于这个点的点权ci ...

  3. 图论 ---- E. Pairs of Pairs(构造+无向图的dfs树的性质)

    题目链接 题目大意: 题目解法: 首先我们先对这个图求一个dfs树dfs树dfs树,那么对dfs树dfs树dfs树求树的直径rrr如果⌈n2⌉≤r\lceil\frac{n}{2}\rceil\leq ...

  4. 【BZOJ3551】Peaks加强版,主席树+kruskal重构+dfs序+倍增思想

    传送门 写在前面:一道调了不止一上午的题目 思路:我们先来看一下神奇的kruskal重构树 图中红色的是原图的边权,黑色的是原图上的点 这样生成的树有一些十分优美的性质: 1.二叉树(好吧这题意义不大 ...

  5. CF732F Tourist Reform(dfs树、边双连通图、tarjan)

    因为知道了算法tag,所以想到了正解: 先给出两个性质: 边双给边定向一定可以转为强连通图,此为最优解 树给边定向后R的最小值必为0 性质2证明如下: 设树有n个节点, 若R_min!=0, 则每点出 ...

  6. 算法基础11 —— 树入门(二叉树的遍历以及构造 + 普通树转换成二叉树 + 例题 + 二叉树的一些操作)

    字符二叉树的遍历 对于以上二叉树 先序遍历为(根左右) : ABCDEFG 中序遍历为(左根右) : CBEDAFG 后序遍历为(左右根) : CEDBGFA 层序遍历:(从左往右.从上往下) ABF ...

  7. 仙人掌相关问题的解法(1)-DFS树解决仙人掌DP问题,圆方树

    前言 有难度的仙人掌题在近几年也只是在国家集训队水平的比赛里才会出现. 不过,这不是说仙人掌对国集水平以下的选手意义不大: 首先,仙人掌暴力 DP 问题难度并不大,在省选. NOI 甚至 NOIP 中 ...

  8. Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树

    传送门 文章目录 题意: 思路: 题意: 给你个nnn个点mmm条边的图,可以选择完成以下两个任务中的一个: (1)(1)(1)找出大小恰好为n\sqrt nn​的一个独立集. (2)(2)(2)找出 ...

  9. [XSY] 分割(dfs树)

    分割 题目相当于问 删掉两个点后 图是否仍然连通 割点问题,考虑用dfs树解决 设删去点u,v(dfn[v]<dfn[u]) 把 u, v 删去之后整棵树大概断成了几个部分: • v 上面到根的 ...

最新文章

  1. massive_record exmple
  2. MIT线性代数:20.克拉默法则,逆矩阵和体积
  3. 跨站点脚本(xss)_跨站点脚本(XSS)和预防
  4. python with open 循环建立指定名字文件_Python基础——文件
  5. mysql key value 排序_MySQL按字符串中部分数值排序
  6. 嵌套点击事件只执行第一次
  7. 如何让ul的符号隐藏_HTML+CSS之如何找BUG
  8. kickstart实现网络安装centos6.3系统
  9. 写一个自动阅读的方法(需要运用html和css和JavaScript)
  10. Activiti6--入门学习--基础知识环境搭建部署
  11. 实时报价查询系统C++编程实现(阿里面试题改编)
  12. 笔记13-1(C语言 三子棋)
  13. 图解密码技术学习笔记
  14. 900年历史的万安桥失火!传统古建筑又该如何保护?
  15. 虚拟机配置可用的DNS服务器
  16. 个人家用nas_希捷个人云评测:家用NAS中的佼佼者
  17. 人工智能,达尔文进化论
  18. IoC与DI浅显易懂的讲解
  19. 2018年Java面试题
  20. 用友t3服务器未能启动,用友T3服务无法启动,错误1075用友T3服务无法启动

热门文章

  1. selenium工具的安装
  2. 尚硅谷学Javaweb,关于正则表达式笔记
  3. Python 的 __name__ 变量,到底是个什么东西?
  4. 在计算机视觉方向如何快速提升自己?
  5. 三维重建新应用:精确还原凶杀现场细节!
  6. 为IP签发SSL证书
  7. 【裴蜀定理】[HAOI2011]向量
  8. 赛门铁克发布针对WannaCry勒索软件的更新预警
  9. Exchange 分析器工具介绍及案例分析
  10. python kafka 生产