大意: 无向图, 无重边自环, 每个点度数>=3, 要求完成下面任意一个任务

  • 找一条结点数不少于n/k的简单路径
  • 找k个简单环, 每个环结点数小于n/k, 且不为3的倍数, 且每个环有一个特殊点$x$, $x$只属于这一个环

任选一棵生成树, 若高度>=n/k, 直接完成任务1, 否则对于叶子数一定不少于k, 而叶子反向边数>=2, 一定可以构造出一个环

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <string.h>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+7, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {ll r=1%P;for (a%=P;n;a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
ll inv(ll x){return x<=1?1:inv(P%x)*(P-P/x)%P;}
//head const int N = 1e6+10;
int n, m, k;
vector<int> g[N];
int q[N];
int dep[N], vis[N], fa[N]; void dfs(int x, int f, int d) {
vis[x]=1,fa[x]=f,dep[x]=d;
if (d>=(n+k-1)/k) {
puts("PATH");
printf("%d\n", d);
while (x) printf("%d ",x),x=fa[x];
puts(""),exit(0);
}
int ok = 0;
for (int y:g[x]) if (!vis[y]) {
ok = 1, dfs(y,x,d+1);
}
if (!ok) q[++*q]=x;
} int main() {
scanf("%d%d%d", &n, &m, &k);
REP(i,1,m) {
int u, v;
scanf("%d%d", &u, &v);
g[u].pb(v),g[v].pb(u);
}
dfs(1,0,1);
puts("CYCLES");
REP(i,1,k) {
int x=0, y=0, z=q[i];
for (int t:g[z]) if (t!=fa[z]) {
if (!x) x=t;
else y=t;
}
if ((dep[z]-dep[x]+1)%3) {
printf("%d\n",dep[z]-dep[x]+1);
for (; printf("%d ",z), z!=x; z=fa[z]) ;
} else if ((dep[z]-dep[y]+1)%3) {
printf("%d\n",dep[z]-dep[y]+1);
for (; printf("%d ",z), z!=y; z=fa[z]) ;
} else {
if (dep[x]<dep[y]) swap(x,y);
printf("%d\n", dep[x]-dep[y]+2);
for (; printf("%d ",x), x!=y; x=fa[x]) ;
printf("%d", z);
}
puts("");
}
}

Johnny Solving CodeForces - 1103C (构造,图论)的更多相关文章

  1. CF1103C Johnny Solving (Codeforces Round #534 (Div. 1)) 思维+构造

    题目传送门 https://codeforces.com/contest/1103/problem/C 题解 这个题还算一个有难度的不错的题目吧. 题目给出了两种回答方式: 找出一条长度 \(\geq ...

  2. Codeforces 1103 C. Johnny Solving

    Codeforces 1103 C. Johnny Solving 题目大意: 有一张 \(n\) 个点 \(m\) 条边的简单无向图,每个点的度数至少为 \(3\) ,你需要构造出两种情况之一 一条 ...

  3. CCO2017 Vera and Trail Building 构造+图论

    正解:构造+图论 解题报告: 找了半天才找到的传送门! 先简要表达下题意 一个图上,如果存在(a,b)满足a<b且存在从a到b再回到a的路径,每条道路被经过至多一次,我们称(a,b)为完美点对试 ...

  4. CodeForces 1103C. Johnny Solving

    题目简述:给定简单(无自环.无重边)连通无向图$G = (V, E), 1 \leq n = |V| \leq 2.5 \times 10^5, 1 \leq m = |E| \leq 5 \time ...

  5. B - Save the problem! CodeForces - 867B 构造题

    B - Save the problem! CodeForces - 867B 这个题目还是很简单的,很明显是一个构造题,但是早训的时候脑子有点糊涂,想到了用1 2 来构造, 但是去算这个数的时候算错 ...

  6. Codeforces 746G(构造)

                                                                                                      G. ...

  7. Codeforces 1188A 构造

    题意:给你一颗树,树的边权都是偶数,并且边权各不相同.你可以选择树的两个叶子结点,并且把两个叶子结点之间的路径加上一个值(可以为负数),问是否可以通过这种操作构造出这颗树?如果可以,输出构造方案.初始 ...

  8. C - Long Beautiful Integer codeforces 1269C 构造

    题解: 这里的m一定是等于n的,n为数最大为n个9,这n个9一定满足条件,根据题目意思,前k个一定是和原序列前k个相等,因此如果说我们构造出来的大于等于原序列,直接输出就可以了,否则,由于后m-k个一 ...

  9. 【Codeforces】【图论】【数量】【哈密顿路径】Fake bullions (CodeForces - 804F)

    题意 有n个黑帮(gang),每个黑帮有siz[i]个人,黑帮与黑帮之间有有向边,并形成了一个竞赛完全图(即去除方向后正好为一个无向完全图).在很多年前,有一些人参与了一次大型抢劫,参与抢劫的人都获得 ...

随机推荐

  1. Python tricks(7) -- new-style class的__slots__属性

    __slots__是在python 2.2开始引入的一个新特性, 我们来看一下官方给出的解释. This class variable can be assigned a string, iterab ...

  2. [转载]C#操作符??和?:

    先看如下代码: string strParam = Request.Params["param"]; if ( strParam== null ) {     strParam= ...

  3. Django框架----render函数和redirect函数的区别

    render函数和redirect函数的区别: render:只会返回页面内容,但是未发送第二次请求 redirect:发挥了第二次请求,url更新 具体实例说明 render: redirect:

  4. Java 实现后缀xls文件读取

    Java 实现后缀xls文件读取 一.开发环境 poi采用的3.9版本 + JDK1.6 + Myeclipse 二,JAR包 三.实现代码 实体类:UserRoleBean package nc.x ...

  5. 20165211 2017-2018-2 《Java程序设计》第5周学习总结

    20165211 2017-2018-2 <Java程序设计>第5周学习总结 教材学习内容总结 本周,我学习了书本上第五.六两章的内容,以下是我整理的主要知识. 第五章 内部类与异常类 内 ...

  6. codevs 1423 骑士 - Tarjan - 动态规划

    题目描述 Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵 ...

  7. SpringCloud请求响应数据转换(一)

    异常现象 近期做Spring Cloud项目,工程中对Controller添加ResponseBodyAdvice切面,在切片中将返回的结果封装到ResultMessage(自定义结构),但在Cont ...

  8. 常用模块之 shutil,json,pickle,shelve,xml,configparser

    shutil 高级的文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 import shutil shut ...

  9. vi如何修改注释颜色

    答:往~/.vimrc或/etc/vimrc的最后添加以下行: hi comment ctermfg=6

  10. Centos用yum方式安装nodejs和npm

    要通过 yum 来安装 nodejs 和 npm 需要先给 yum 添加 epel 源 ##添加 epel 源 rpm -ivh http://download.fedoraproject.org/p ...