Wizard's Tour

Time Limit: 50 Sec  Memory Limit: 512 MB

Description

  

Input

  

Output

  

Sample Input

  4 5
  1 2
  3 2
  2 4
  3 4
  4 1

Sample Output

  2
  4 1 2
  4 3 2

HINT

  

Solution

  首先,一个连通块的答案可以是floor(m / 2)。考虑如何构造出一种解。

  首先我们先搞出一个dfs树

  那么现在对于一个点,有三种边:1. 非树边;2. 儿子边;3. 父亲边

  我们将非树边儿子边优先级看做一样的父亲边优先级最低

  考虑将配给,即这个点是一种走法中的中点。从叶子节点往上做。两两配对这些边

  显然每条边都被尽可能利用了,最后只有与根相连的边可能会有最多一条用不了。

  这样就是一种解了。

Code

 #include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector>
using namespace std;
typedef long long s64; const int ONE = ;
const int MOD = 1e9 + ; int get()
{
int res = , Q = ; char c;
while( (c = getchar()) < || c > )
if(c == '-') Q = -;
if(Q) res = c - ;
while( (c = getchar()) >= && c <= )
res = res * + c - ;
return res * Q;
} int ans_len;
struct power
{
int l, mid, r;
}Ans[ONE * ]; int n, m;
int x, y;
int next[ONE * ], first[ONE], go[ONE * ], tot;
int vis[ONE * ]; void Add(int u, int v)
{
next[++tot] = first[u], first[u] = tot, go[tot] = v;
next[++tot] = first[v], first[v] = tot, go[tot] = u;
} vector <power> A;
int fat[ONE]; void Dfs(int u)
{
for(int e = first[u]; e; e = next[e])
{
int v = go[e];
if(fat[v] || vis[e]) continue;
fat[v] = u, Dfs(v);
} A.clear();
for(int e = first[u]; e; e = next[e])
if(!vis[e] && fat[u] != go[e]) A.push_back((power){go[e], , e});
for(int e = first[u]; e; e = next[e])
if(!vis[e] && fat[u] == go[e]) A.push_back((power){go[e], , e}); int p = , len = A.size();
for(int j = ; j + < len; j += )
{
vis[A[j].r] = vis[(A[j].r-^)+] = ;
vis[A[j+].r] = vis[(A[j+].r-^)+] = ;
Ans[++ans_len] = (power){A[j].l, u, A[j + ].l};
}
} int main()
{
n = get(); m = get();
for(int i = ; i <= m; i++)
x = get(), y = get(), Add(x, y); for(int i = ; i <= n; i++)
if(!fat[i]) Dfs(i); printf("%d\n", ans_len);
for(int i = ; i <= ans_len; i++)
printf("%d %d %d\n", Ans[i].l, Ans[i].mid, Ans[i].r);
}

【Codeforces858F】Wizard's Tour [构造]的更多相关文章

  1. Wizard's Tour

    F. Wizard's Tour time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  2. Wizard's Tour CodeForces - 860D (图,构造)

    大意: 给定$n$节点$m$条边无向图, 不保证连通, 求选出最多邻接边, 每条边最多选一次. 上界为$\lfloor\frac{m}{2}\rfloor$, $dfs$贪心划分显然可以达到上界. # ...

  3. CF1053E Euler tour 构造

    正解:构造 解题报告: 传送门! 这种题目一般都是首先考虑合法性 这题也不例外,思考怎么样是合法的呢? 有四点: 1)a[1]=a[2n-1],显然不说 2)若a[i]=a[j],则(j-i)& ...

  4. CodeForces 860D Wizard's Tour

    题意 给出一张无向图,要求找出尽量多的长度为2的不同路径(边不可以重复使用,点可以重复使用) 分析 yzy:这是原题 http://www.lydsy.com/JudgeOnline/problem. ...

  5. CF858F Wizard's Tour 解题报告

    题目描述 给定一张 \(n\) 个点 \(m\) 条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通. 你想在这张图上进行若干次旅游,每次旅游可以任选一个点 \(x\) 作为起点,再走到一个 ...

  6. CF858F Wizard's Tour

    也许更好的阅读体验 \(\mathcal{Description}\) 给定一张 \(n\) 个点 \(m\) 条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通. 你想在这张图上进行若干次 ...

  7. 「CF858F」 Wizard's Tour

    传送门 Luogu 解题思路 首先对于树的情况,我们很显然有一种贪心策略: 对于每一个节点先匹配子树,然后在还可以匹配的儿子间尽可能匹配,要是多出来一个就往上匹配. 推广到图的情况... 我们在图的生 ...

  8. Codeforces Round #434 (Div. 2)

    Codeforces Round #434 (Div. 2) 刚好时间对得上,就去打了一场cf,发现自己的代码正确度有待提高. A. k-rounding 题目描述:给定两个整数\(n, k\),求一 ...

  9. poj 题目分类(2)

    初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj329 ...

随机推荐

  1. react 组件构建设计

    项目设计中,可以从顶层React元素开始,然后实现它的子组件,自顶向下来构建组件的层级组件的写法:1.引入依赖模块2.定义React组件3.作为模块导出React组件4.子组件更新父组件的机制5.父组 ...

  2. JAVA里的布尔运算符-甲骨文面试题

    重要一点: (& ,|) ==>二进制布尔运算符,(&&,||)==>条件布尔运算符 二进制布尔运算符,两边都会执行,不管左边是否为真或假==>对于运算符两边 ...

  3. linq 左连接实现两个集合的合并

    //第一个集合为所有的数据 var specilist = new List<Me.SpecificationsInfo>(); var resultall = (from a in db ...

  4. DAY4-Flask项目

    项目出现的问题: 问题处在import requests.requests库已经安装了啊; 找了半天也不知道具体错误在哪里,根据提示想是不是http.py这个模块与Python内置的同名模块冲突了?所 ...

  5. Smallest Minimum Cut HDU - 6214(最小割集)

    Smallest Minimum Cut Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Oth ...

  6. idea的protobuf使用

    1.安装插件 2.添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...

  7. Linux内核设计第八周学习总结 理解进程调度时机跟踪分析进程调度与进程切换的过程

    陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.视频内容 Linux ...

  8. 【bzoj4826】影魔

    Portal --> bzoj4826 Solution 为什么莫名读了很长时间的题...== 逐渐不会语文qwq 貌似这题的做法很多,丢上来的话是因为..这个化简条件的过程莫名爽哈哈哈哈哈 注 ...

  9. PHP发送HTTP请求的几种方式

    转发:https://blog.tanteng.me/2017/07/php-curl-guzzlehttp/ 1)PHP开发中我们常用CURL 方式封装 HTTP请求,什么是CURL? CURL 是 ...

  10. NSLineBreakByWordWrapping和NSLineBreakByCharWrapping

    在iOS开发过程中,在文本的lineBreakMode中有以下几个功能: NSLineBreakByWordWrapping = 0 //以空格为界,保留整个单词. NSLineBreakByChar ...