2019ICPC上海Spanning Tree Removal构造题

2023-11-18

刚打完2021杭电多校6,有个构造,当时没有做,回头看了一波巨佬的博客学了一手,在这里记录一下
题目链接

链接:https://ac.nowcoder.com/acm/contest/4370/D
来源:牛客网
spj

题目描述

Bob has recently learned algorithms on finding spanning trees and wanted to give you a quiz.

To recap, a spanning tree is a subset of graph {G}G, which has all the vertices covered with minimum possible number of edges. Hence, a spanning tree does not have cycles and it cannot be disconnected. Given an arbitrary undirected simple graph (without multiple edges and loops), a spanning tree removal is defined as: retrieve one spanning tree of the graph, and remove all the edges selected by the spanning tree from the original graph, obtaining a new graph.

Bob found "spanning tree removal’’ so fun that he wanted to do it over and over again. In particular, he began with a complete graph, i.e., a graph with every pair of distinct vertices connected by a unique edge. Your goal, is to smartly choose spanning trees to remove so that you can repeat as many times as possible until there is no longer a spanning tree in the graph.

输入描述:

在这里插入图片描述

输出描述:

在这里插入图片描述

示例1
输入

3
2
3
4

输出

Case #1: 1
1 2
Case #2: 1
3 1
1 2
Case #3: 2
1 3
3 4
2 4
3 2
1 4
2 1

本题是一个spj的问题
题意是给定一个完全图,包含了n个节点,每次可以在这个图中选择一个生成树,然后将该生成树的所有边都删除,然后得到一个新图,然后再从新的图中重复上述操作,问最多可以操作多少次,对于每一次操作,输出选择的生成树中的所有边(n-1行)

在lc哥的图中稍加改造,做成这个样子:
图中有6个点,将点按照0 -> 5编号

在这里插入图片描述
pre指的是上一个到达的节点编号
比如我们选择从0结点开始
0 -> 0 + 10 -> 1
1 -> 1 - 21 -> 5
5 -> 5 + 35 -> 2
2 -> 2 - 42 -> 4
4 -> 4 + 54 -> 3
注意这里有个( +n)%n的过程
由于节点从1开始编号,所以说,我们将左右两边+1即可
对于最多可以操作多少次的问题,我们可以从起点的选择来进行考虑,其中有n个节点,去掉重复的一半,只会有n/2(下取整)个
比如在上面有6个点的图中,从0开始和从3开始得到的图是一样的

code:
在这里插入图片描述

#include <iostream>

using namespace std;
#define in(x) cin>>x
typedef long long ll;

int main(){
    int _;in(_);
    int cnt = 0;
    while(_--){
        int n;in(n);
        ++ cnt;
        printf("Case #%d: %d\n",cnt,n>>1);
        for(int i=1;i<=n/2;i++){
            int pre = i;
            int sign = 1;
            int now = i;
            for(int j=1;j<=n-1;j++){
                pre = now;
                now = (pre + sign * j + n) % n;
                printf("%d %d\n",pre+1,now+1);
                sign *= -1;
            }
        }
    }
    
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2019ICPC上海Spanning Tree Removal构造题 的相关文章

  • 基于Jfinal实现的权限管理系统 JfinalUIB

    JfinalUIB 是 Jfinal charisma beetl postgresql 同时支持MySQL ehcache ztree druid bcprov 实现的用户权限管理系统 项目用到了众多的开源组件 还有一些是分享的学习代码片
  • nginx 交叉编译

    环境 Linux CentOS6 9 2 6 32 696 el6 x86 64 软件版本 nginx http nginx org download nginx 1 18 0 tar gz openssl https www openss
  • python3读取excel文件只提取某些行某些列的值

    今天有一位同学给了我一个excel文件 要求读取某些行 某些列 然后我试着做了一个demo 这里分享出来 希望能帮到大家 首先安装xlrd pip3 install xlrd 然后上代码 import numpy as np import
  • Java面向对象 - 文件类

    文章目录 第4关 图片查看器 挑战任务 答案 第4关 图片查看器 挑战任务 本关任务 小明想要开发一个图片查看器 但是他想只显示文件夹下所有图片类型的文件 你来帮小明实现这个功能吧 答案 代码如下 示例 package step4 impo
  • Shell if 条件判断

    Shell 语言中的if条件 一 if的基本语法 if command then 符合该条件执行的语句 elif command then 符合该条件执行的语句 else 符合该条件执行的语句 fi 二 文件 文件夹 目录 判断 b FIL
  • systemd和initd添加开机自启服务

    一 systemd Systemd 就是为了解决这些问题而诞生的 它的设计目标是 为系统的启动和管理提供一套完整的解决方案 使用了 Systemd 就不需要再用init了 Systemd 取代了initd 成为系统的第一个进程 PID 等于
  • LitJson的使用教程

    下载LitJson dll 放进你的工程 序列化 public static void SaveData string FileName Assets Data Archice json StreamReader reader File O
  • 开发日志:微信公众号网页开发的调试工具

    在这里记录一下开发时有用到的一些工具 VConcole调试工具 手机端的H5调试工具 http debugx5 qq com
  • 14-数据结构-有序链表排序

    问题 给你一个链表 然后去进行排序 并输出 思路 排序时 类似于冒泡排序 这里则定义两个链表指针 一个指向第一位 一个指向第一位的后一位 由于需要排序的是数据 因此定义一个中间变量 int temp 用于后面的数据域比较排序 两层循环 外循
  • ChatGPT指令大全(中文版)

    文章目录 ChatGPT指令大全 中文版 生活相关 充当讲故事的人 充当旅游指南 扮演脱口秀喜剧演员 充当抄袭检查员 担任厨师 充当 电影 书籍 任何东西 中的 角色 学习相关 充当 ChatGPT 提示生成器 充当维基百科页面 充当英语发
  • 微信小程序开发——入门-01(附带练手小程序)

    目录标题 一 项目展示 二 项目gitee开源地址 三 基础 一 项目结构 二 全局配置 app json 三 页面配置 四 微信搜索索引到小程序 sitemap json 五 数据绑定 六 场景值 用户进入小程序的方式 七 注册小程序 a
  • JMeter入门教程(10) --函数助手

    文章目录 1 CSVRead 2 Random 3 RandomString 4 RandomDate 5 time 在JMeter的选项菜单中有一个 函数助手对话框 点击打开 函数助手 对话框 使用函数助手 我们可以从 选择一个功能 下拉
  • SQL:将表中一列拆成两列

    计算tableA表中type列有两种类型 计算每个id的每种类型的count和 id type count 1 1 10 2 2 5 1 1 8 4 2 9 方法 select id sum case when type 1 then co
  • unity实现简单的地图编辑器,实现跑酷地图编辑器 2d地图编辑器,导出地图json数据,导入地图json数据

    这里使用的是unity2020 1 对于unity编辑器开发也不是很了解 这方面的教程也不多 也是慢慢摸索的 效果显示 首先简单 介绍下Unity编辑器开发 1 Editor下打开新窗口需要继承EditorWindow 然后使用获取窗口即可
  • Linux系统Word转换PDF,文档字体乱码不显示问题解决。

    最近在做在线预览office文档功能 遇到的问题在这里记录一下 在用unoconv做文档转换时 发现中文转换乱码 找到最多的办法就是把 windows 下的字体全部拷贝到Linux字体库中并使之生效 1 首先windows 字体库的路径 C
  • 信息系统项目管理师(北京)——拿证实践总结

    目录 一 过程概述 二 经验分享 1 关于报班 2 关于教材 3 关于上午选择题 4 关于下午计算题 5 关于下午论文 6 关于其他杂七杂八小经验 三 证书用途总结 一 过程概述 2022年听说可以个税抵扣3600元 决定为了这笔大款考一个
  • 抖音小程序实践一:申请&初始化

    一 官方文档与实践 抖音小程序是什么 从官方视频了解 从2022年开始 字节跳动就开始火力全开的与知名企业合作 推动抖音小程序的孵化 然后逐步开放普通企业争相进入抖音小程序领域 来分一分流量的红利 巨量 星图 抖 一系列配套的推流渠道也都接

随机推荐