题目描述

给定一张 \(n\) 个点 \(m\) 条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通。
你想在这张图上进行若干次旅游,每次旅游可以任选一个点 \(x\) 作为起点,再走到一个与 \(x\) 直接有边相连的点 \(y\),再走到一个与 \(y\) 直接有边相连的点 \(z\) 并结束本次旅游。
作为一个旅游爱好者,你不希望经过任意一条边超过一次,注意一条边不能即正向走一次又反向走一次,注意点可以经过多次,在满足此条件下,你希望进行尽可能多次的旅游,请计算出最多能进行的旅游次数并输出任意一种方案。

输入输出格式

输入格式

第 \(1\) 行两个正整数 \(n\) 与 \(m\),表示全图的点数与边数
下接 \(m\) 行,每行两个数字 \(u\) 与 \(v\) 表示一条边

输出格式

第 \(1\) 行一个整数 \(cnt\) 表示答案
下接 \(cnt\) 行,每行三个数字 \(x, y\) 与 \(z\),表示一次旅游的路线
如有多种旅行方案,任意输出一种即可

说明

对于前 \(20\%\) 的数据, \(n \le10, m \le 20\).
对于另 \(20\%\) 的数据, \(m = n - 1\),并且图连通
对于另 \(10\%\) 的数据,每个点的度数不超过 \(2\)
对于 \(100\%\) 的数据, \(n \le 100000, m \le 200000\)


可能还是没怎么做过构造题目吧,我打的树的特殊数据分其实改一改就是正解了。

通过手玩我们发现对一个有\(m\)条边的连通块来说,方案数量一定可以构造到\(\lfloor\frac{m}{2}\rfloor\)个。

构造方法如下

对某个连通块随便选择一个点构造一颗搜索树,在回溯的时候配对可以连接的边,如果不能两两配对,那么用上自己头上的边。

考虑为什么这样是对的,思路很简单。我们发现除了选定根的某个儿子边,所有的边都可以用上,不会产生浪费。


Code:

#include <cstdio>
#include <vector>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define Rep(i,a,b) for(int i=a;i<b;i++)
#define ed() for(int i=head[now];i;i=Next[i])
#define pb(a) push_back(a)
const int N=2e5+10;
int head[N],to[N<<1],Next[N<<1],cnt=1;
void add(int u,int v)
{to[++cnt]=v,Next[cnt]=head[u],head[u]=cnt;
}
int used[N<<1],ans[N<<2],n,m,tot,vis[N];
void dfs(int now,int fa,int edg)
{vis[now]=1;std::vector <int> ch;ed(){int v=to[i];if(v!=fa&&!vis[v]) dfs(v,now,i);}ed(){int v=to[i];if(v!=fa&&!used[i]){ch.pb(i);used[i^1]=1;}}Rep(i,0,ch.size()){if(i&1) ans[++tot]=now;ans[++tot]=to[ch[i]];}if(ch.size()&1){if(fa) ans[++tot]=now,ans[++tot]=fa,used[edg]=1;else tot--;}
}
int main()
{scanf("%d%d",&n,&m);int u,v;rep(i,1,m) scanf("%d%d",&u,&v),add(u,v),add(v,u);rep(i,1,n) if(!vis[i]) dfs(i,0,0);printf("%d\n",tot/3);rep(i,1,tot){printf("%d ",ans[i]);if(i%3==0) printf("\n");}return 0;
}

2018.10.25

转载于:https://www.cnblogs.com/butterflydew/p/9850674.html

CF858F Wizard's Tour 解题报告相关推荐

  1. USACO Betsy's Tour 解题报告

    大神做了这道题:https://www.byvoid.com/blog/usaco-544-betsys-tour.解释得非常清楚,我也是按照这种方法做的,即统计"必经点"的个数, ...

  2. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  3. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  4. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  5. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  6. 解题报告(十三)中国剩余定理(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  7. 解题报告(四)生成函数(ACM/ OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  8. 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 解题报告(一)E、(BZOJ4589)Hard Nim(博弈论 + FWT)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. 牛客练习赛61 D 最短路变短了(最短路,反向最短路)难度⭐⭐⭐★
  2. mysql备份工具xtr_mysql-xtrbackup备份与恢复
  3. 利用Hexo搭建个人博客-博客初始化篇
  4. spring-boot注解详解(四)
  5. java中native_java中的native关键字
  6. 阿里云部署Docker(5)----管理和公布您的镜像
  7. 【专栏必读】(计算机组成原理题目题型总结)计理期末考试408统考算机组成原必考题型总结
  8. 【LeetCode】剑指 Offer 31. 栈的压入、弹出序列
  9. oracle存储怎么调试tord,接口_数据交换应用指导(20页)-原创力文档
  10. GraphChi: Large-Scale Graph Computation on Just a PC
  11. socket编程(十四)
  12. 正则表达式学习(一)
  13. (新手)使用pandas操作EXCEL
  14. 敏捷开发一千零一问:怎样处理重要但不明白的任务?
  15. 大一微积分笔记整理_大一上学期微积分高数复习要点
  16. 所罗门王的宝藏(高斯消元)
  17. 一些文字游戏....
  18. Unity3D开发游戏坦克大战
  19. Linux服务器配置静态IP地址方法
  20. delegation模式

热门文章

  1. PowerDesigner脚本使用记录
  2. 理清 WebSocket 和 HTTP 的关系
  3. 用Python爬网页需要了解什么背景知识
  4. 干货|为什么Kafka不支持读写分离
  5. 对ThreadLocal实现原理的一点思考
  6. 使用Nomad和OpenFaaS提供FaaS服务
  7. 14.线程安全?线程不安全?可重入函数?不可重入函数?
  8. Android Studio——字体大小的修改
  9. 前端JS——滑动滑块验证登录(源码及效果)
  10. java 常用的api_Java中常用的API(一)——Object