在如今所有NOI系列赛事已经开全栈的时势下,人工栈已经离我们很远很远。

所以这博客就是我弄着玩的。

首先我们要清楚的是c++的goto写法:

loop:;
…
goto loop;

在运行到goto时,就会跳到对应的标记,标记在goto的前后都可以。

然而你试着试着却发现编译错误了,

原因是loop和goto之间不能有新加变量(递归也是新加变量)的操作,你可以想象你的代码里不能int k两次。

那我们到底该怎么改呢,举个例子?

遍历树的:

void dg(int x) {
siz[x] = 1;
for(int i = fi[x]; i; i = nt[i]) {
int y = to[i];
if(y == fa[x]) continue;
fa[y] = x;
dg(y);
siz[x] += siz[to[i]];
}
}

1.把递归里所有用到变量都在开头定义。

void dg(int x) {
int i, y;
siz[x] = 1;
for(i = fi[x]; i; i = nt[i]) {
y = to[i];
if(y == fa[x]) continue;
fa[y] = x;
dg(y);
siz[x] += siz[to[i]];
}
}

2.新命名这些变量,包括dg里的参数,存到数组里,多开一个type表示当前程序应该从哪里开始。

int z0, ty[N], zx[N], zi[N], zy[N];

3.用while循环实现递归过程。

while循环开始加载所有变量,然后开始goto。

在每次递归前都把当前所有用到的变量记下来,当前位置记好,下一层的开好,跳回开头,递归后设一个标记,以便之后跳过来。

int z0, ty[N], zx[N], zi[N], zy[N];
void dg(int x) {
ty[++ z0] = 0, zx[z0] = x;
while(z0) {
loop0 :;
int x = zx[z0], i = zi[z0], y = zy[z0];
if(ty[z0] == 1) goto loop1;
siz[x] = 1;
for(i = fi[x]; i; i = nt[i]) {
y = to[i];
if(y == fa[x]) continue;
fa[y] = x; zx[z0] = x, zi[z0] = i, zy[z0] = y, ty[z0] = 1;
ty[++ z0] = 0, zx[z0] = y;
goto loop0;
//dg(y);
loop1 :; siz[x] += siz[to[i]];
}
z0 --;
}
}

这样改的好处是并不用做特别多的修改,且不容易改错,是一种简单的人工栈写法。

骚操作:c++如何用goto便捷地写人工栈?的更多相关文章

  1. 如何在命令长度受限的情况下成功get到webshell(函数参数受限突破、mysql的骚操作)

    0x01 问题提出 还记得上篇文章记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门),我们讲到了一些PHP的一些如何巧妙地绕过数字和字母受限的技巧,今天我要给大家分享的是如 ...

  2. Typescript骚操作,在TS里面直接插入HTML

    Typescript骚操作,在TS里面直接插入HTML,还有语法提示 先给大家看一个图 因为我不喜欢用很重的框架,主要是并非专业UI,但是偶尔会用到,还是觉得直接element组装受不了,想想能在ts ...

  3. 闪电侠 Netty 小册里的骚操作

    前言 即使这是一本小册,但基于"不提笔不读书"的理念,仍然有必要总结一下.此小册对于那些"硬杠 Netty 源码 却不曾在千万级生产环境上使用实操"的用户非常有 ...

  4. awk骚操作

    一.awk自加 [root@168web3 ~]# head /data/logs/cloud_monitor_rds_cpu.log |awk '{sum+=$NF}END{print sum}' ...

  5. UOJ 117 欧拉回路(套圈法+欧拉回路路径输出+骚操作)

    题目链接:http://uoj.ac/problem/117 题目大意: 解题思路:先判断度数: 若G为有向图,欧拉回路的点的出度等于入度. 若G为无向图,欧拉回路的点的度数位偶数. 然后判断连通性, ...

  6. 关于map 及 map 骚操作

    关于map这个东西   很冷门..................   但是,这个博客带你稍微了解一下map:   map用法:一般当作一个下表无穷大的数组   关于它的骚操作:map的鬼畜用法,可以 ...

  7. 通过HTTP的HEADER完成各种骚操作

    作为一名专业的切图工程师,我从来不care网页的header,最多关心Status Code是不是200.但是HEADER真的很重要啊,客户端从服务器端获取内容,首先就是通过HEADER进行各种沟通! ...

  8. 洛谷 P1045 麦森数 (快速幂+高精度+算位数骚操作)

    这道题太精彩了! 我一开始想直接一波暴力算,然后叫上去只有50分,50分超时 然后我改成万位制提高运算效率,还是只有50分 然后我丧心病狂开long long用10的10次方作为一位,也就是100亿进 ...

  9. Mac OS 上的一些骚操作

    本帖记录个人在使用 Mac 操作系统上的一些骚操作,不断更新,以飨读者. 快速移动网页到顶部或底部 用双指上下划触摸板吗?NO,我们有更骚的操作: command + ↑ 回到顶部 command + ...

随机推荐

  1. Python--前端之HTML

    html概述和基本结构 HTML概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的语言 ...

  2. NOIWC2019 懵逼记

    弱省蒟蒻,第一次也是最后一次来冬令营.. Day [-inf,-1] \(woc\)咋啥都听不懂,没错在下划水王. Day 0 白天上课继续划水..晚上跑去试机,骗了半天交互的分就滚了..半夜里竟然睡 ...

  3. TTL 与 CMOS

    Frm: https://blog.csdn.net/qq_27745395/article/details/76687175 http://baijiahao.baidu.com/s?id=1598 ...

  4. 2019 ACM-ICPC 南京 现场赛 H. Prince and Princess

    题意 王子想要娶公主,但是需要完成一个挑战:在一些房间中找出公主在哪. 每个房间有一个人,他们彼此知道谁在哪个房间.可以问他们三种问题: 你是谁? 在某个房间是谁? 公主在哪个房间? 有三类人,一类一 ...

  5. 2015 ACM-ICPC 亚洲区上海站 A - An Easy Physics Problem (计算几何)

    题目链接:HDU 5572 Problem Description On an infinite smooth table, there's a big round fixed cylinder an ...

  6. Error configuring application listener of class org.springframework.web.context.

    1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 缺少asm-3.3.jar 2.java.lang.NoClassDe ...

  7. Dubbo 微服务系列(03)服务注册

    Dubbo 微服务系列(03)服务注册 [TOC] Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 图1 Dubbo经典架构图 注:本图来源 Dubbo官方架构 ...

  8. 利用TKinter模块创建GUI窗口

    # -*- coding: utf-8 -*- from Tkinter import *     root = Tk() # 80x80代表了初始化时主窗口的大小,0,0代表了初始化时窗口所在的位置 ...

  9. zabbix cpu监控介绍

    一.CPU utilization 使用Zabbix查看CPU利用率,会有下面几个值: CPU idle time:空闲的cpu时间比[简称id]CPU user time:用户态使用的cpu时间比[ ...

  10. java性能调优02

    1.字符串优化处理 1.1 常量池的优化:当String对象拥有相同的值时,他们只引用常量池的同一个拷贝. String a="123"; String b="123&q ...