瞬间移动

题意:要求构造一个图,使其dfs树中有t条树边,b条返祖边,f条前向边,c条其他边。

膜了题解才会,好神啊。

考虑所有结点的深度之和,这个值必须介于$[max(b,f+t),C^{2}_{n}-c]$之间。按照这个构造树以后就容易了。

#include<vector>
#include<cstdio>
#include<algorithm>
#define MN 110000
using namespace std; int n,t,b,f,c,to[MN],top,mi;
vector<int> v[MN],e[MN];
void dfs(int x){
to[++top]=x;
for (int i=;i<top&&b;i++) e[x].push_back(to[i]),b--;
for (int i=;i<top-&&f;i++) e[to[i]].push_back(x),f--;
for (int i=;i<v[x].size();i++) dfs(v[x][i]);
top--;
}
void DFS(int x){
to[++top]=x;
for (int i=;i<v[x].size();i++) DFS(v[x][i]);
}
void _DFS(int x){
for (int i=;i<=top&&c;i++) e[x].push_back(to[i]),c--;
for (int i=;i<v[x].size();i++) _DFS(v[x][i]);
}
int main(){
scanf("%d%d%d%d",&t,&b,&f,&c);n=t+;
mi=max(b,f+t);
if (1LL*n*(n-)/-c<mi) return puts("-1"),;
to[top=]=;
for (int i=;i<=n;i++){
int s=min(mi-(n-i),top);
mi-=s;v[to[s]].push_back(i);
if (s==top) to[++top]=i;
}
top=;
dfs();
for (int i=;i<=n&&c;i++){
for (int j=;j<v[i].size()&&c;j++){
top=;
for (int k=;k<j;k++) DFS(v[i][k]);
_DFS(v[i][j]);
}
}
printf("%d\n",n);
for (int i=;i<=n;i++){
printf("%d",v[i].size()+e[i].size());
for (int j=;j<v[i].size();j++) printf(" %d",v[i][j]);
for (int j=;j<e[i].size();j++) printf(" %d",e[i][j]);puts("");
}
}

hackerrank DFS Edges的更多相关文章

  1. [luogu P3787][新创无际夏日公开赛] 冰精冻西瓜 [树状数组][dfs序]

    题目背景 盛夏,冰之妖精琪露诺发现了一大片西瓜地,终于可以吃到美味的冻西瓜啦. 题目描述 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有 ...

  2. 链式前向星DFS

    本文链接:http://www.cnblogs.com/Ash-ly/p/5399057.html 采用链式前向星存图的DFS: #include <iostream> #include ...

  3. HDU 4280Island Transport(Dinc非STL 模板)

    题意: n岛m条路,然后是 n个岛的坐标,然后是m条双向路,包括 岛和 岛 之间 最大客流量,让求 最左边的岛 到右边的岛 最大客流量 分析: 建图 以 左边的岛为原点,最右边的为终点求最大客流量. ...

  4. 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法

    Graph Search and Connectivity Generic Graph Search Goals 1. find everything findable 2. don't explor ...

  5. Codeforces Round #288 (Div. 2)D. Tanya and Password 欧拉通路

    D. Tanya and Password Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/508 ...

  6. POJ2230 Watchcow【欧拉回路】

    Watchcow Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 6172Accepted: 2663 Special Judge ...

  7. 后缀自动机/回文自动机/AC自动机/序列自动机----各种自动机(自冻鸡) 题目泛做

    题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. #include <cstdlib> #in ...

  8. [vijos 1642]班长的任务 [树形dp]

    背景 十八居士的毕业典礼(1) 描述 福州时代中学2009届十班同学毕业了,于是班长PRT开始筹办毕业晚会,但是由于条件有限,可能每个同学不能都去,但每个人都有一个权值,PRT希望来的同学们的权值总和 ...

  9. [luogu P1967][NOIp2013] 货车运输

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

随机推荐

  1. zTree模糊搜索,显示全部节点和高亮显示

    function searchFun() { var value; if($("#code2").val()!=null && $("#code2&quo ...

  2. SoapUI模拟REST MockService

    一.新建REST工程 二.添加URI 物流查询接口测试地址:http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号 三.输入入参,测试一下 ...

  3. 网关 php-cgi fastcgi phpfpm

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/88 关于网关的理解,一句话就是:作为一种翻译器,抽象出了一种能够 ...

  4. lua中易混淆函数

    lua中易混淆的函数 ipairs和pairs: ipairs只能顺序遍历table,遇到key不是数字就会退出 pairs可以遍历table中所有元素 ----------------------- ...

  5. Linux第五节随笔 /file / vim / suid /sgid sbit

    三期第四讲1.查询文件类型与文件位置命令 file 作用:查看文件类型(linux下的文件类型不以后缀名区分) 语法举例: [root@web01 ~]# file passwd passwd: AS ...

  6. redis centos启动

    转到redis目录 ./redis-server /usr/java/redis/redis.conf

  7. C#中DataGridView动态添加行及添加列的方法

    http://www.jb51.net/article/72259.htm Datagridview添加列: ? 1 2 3 4 5 DataGridViewTextBoxColumn acCode ...

  8. 鸟哥的linux私房菜学习-(五)Linux系统的在线求助man page与info page

    1.man page man是manual(操作说明)的简写啦!只要下达:『man date』 马上就会有清楚的说明出现在你面前喔!如下所示: 进入man命令的功能后,你可以按下『空格键』往下翻页,可 ...

  9. mayavi安装

    Mayavi是python的一个包,提供方便的可视化方案.目前(20150809)Mayavi还没有py3的支持,以下安装环境在python 2.7.10下进行 安装Mayavi: 1. 通过pip ...

  10. Integer和int

    例1: public static void main(String[] args){ Integer a = 128,b = 128; Integer c = 127,d = 127; System ...