Maximum Diameter Graph 【CodeForces - 1082D】【搜索+构造】

2023-11-05

题目链接


  一开始忘记输出有多少条边,WA了好几发都跑不过第一组测试样例,开始怀疑自己是不是读了道假题,然后在大佬们的帮助下,终于AC,好伤心……读假样例(一定是我太弱了)。

  我的思想是采用了树链剖分的dfs()构造思想,可能是因为最近少用了树链剖分有些想念吧,我用dfs()去建边,在此之前先按照节点的度按照降序排列,并且如果最后存在个度为1的节点的话,我们先把它放到第一个上面去就行了。


#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 505;
int N, sum_ofdu, num;
bool vis[maxN];
struct node
{
    int du, id;
    node(int a=0, int b=0):du(a), id(b) {}
}a[maxN];
bool cmp(node e1, node e2) { return e1.du > e2.du; }
struct Eddge
{
    int no, to;
    Eddge(int a=0, int b=0):no(a), to(b) {}
}need[maxN];
int dfs(int u, int fa, int len)
{
    if(fa == N) return len - 1;
    if(fa != -1) need[++num] = Eddge(a[fa].id, a[u].id);
    if(a[u].du <= 0 || a[u+1].du <= 0) return len;
    vis[a[u+1].id] = true;
    a[u].du--;
    a[u+1].du--;
    int ans = dfs(u+1, u, len+1);
    for(int i=u+1; i<=N && a[u].du; i++)
    {
        if(!vis[a[i].id] && a[u].du && a[i].du)
        {
            a[u].du--;
            a[i].du--;
            vis[a[i].id] = true;
            dfs(i, u, 0);
        }
    }
    return ans;
}
int main()
{
    while(scanf("%d", &N)!=EOF)
    {
        sum_ofdu = num = 0; memset(vis, false, sizeof(vis));
        for(int i=1; i<=N; i++)
        {
            scanf("%d", &a[i].du);
            a[i].id = i;
            sum_ofdu += a[i].du;
        }
        if(sum_ofdu < 2*(N-1)) { printf("NO\n"); continue; }
        sort(a+1, a+1+N, cmp);
        int flag = 0;
        if(a[1].du > 1 && a[N].du == 1)
        {
            a[1].du--;  a[N].du--;
            need[++num] = Eddge(a[1].id, a[N].id);
            vis[a[1].id] = true;
            vis[a[N].id] = true;
            flag = 1;
        }
        vis[a[1].id] = true;
        printf("YES %d\n", dfs(1, -1, 0)+flag);
        printf("%d\n", num);
        for(int i=1; i<=num; i++) printf("%d %d\n", need[i].no, need[i].to);
    }
    return 0;
}
/*
17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2
*/

最后放了组测试样例,答案是16条边……一开始一直会WA在这,后来发现是因为当时既然已经把最后一个节点处理掉了,就得把它丢掉了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maximum Diameter Graph 【CodeForces - 1082D】【搜索+构造】 的相关文章

  • 学渣带你刷Leetcode0017. 电话号码的字母组合

    题目描述 给定一个仅包含数字 2 9 的字符串 返回所有它能表示的字母组合 给出数字到字母的映射如下 与电话按键相同 注意 1 不对应任何字母 示例 输入 23 输出 ad ae af bd be bf cd ce cf 说明 尽管上面的答
  • 02 二叉树的DFS(前序、中序或后序遍历实现)【Binary Tree 二叉树】

    二叉树的深度优先遍历主要有三种 前序 根左右 中序 左根右 后序 左右根 下面是完整的实现和讲解 include
  • 剪格子 蓝桥杯 211

    题目描述 如下图所示 3 x 3 的格子中填写了一些整数 我们沿着图中的红色线剪开 得到两个部分 每个部分的数字和都是 60 本题的要求就是请你编程判定 对给定的 m n 的格子中的整数 是否可以分割为两个部分 使得这两个区域的数字和相等
  • 蓝桥杯2019年c++b组国赛题目及题解

    填空题目来源来自于 https blog csdn net l503301397 article details 90697079 大题来源于 ACwing https www acwing com problem search 2 csr
  • 图的深度优先遍历:DFS遍历

    图的深度优先遍历 DFS遍历 提示 系列图的文章 提示 大厂笔试面试都可能不咋考的数据结构 图 由于图的结构比较难 出题的时候 很难把这个图的数据搞通顺 而且搞通顺了题目也需要耗费太多时间 故笔试面试都不会咋考 笔试大厂考的就是你的贪心取巧
  • 算法提高 最长滑雪道(动态规划 + Dfs)

    试题 算法提高 最长滑雪道 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 小袁非常喜欢滑雪 因为滑雪很刺激 为了获得速度 滑的区域必须向下倾斜 而且当你滑到坡底 你不得不再次走上坡或者等待升降机来载你 小袁想知道在某个区
  • [leetcode] 球会落何处 模拟

    给出一个矩阵 里面的值为 1 or 1 1的时候是从左上到右下 1的时候是从左下到右上 当一个球从上方x 0 lt x lt m 放入之后 从哪个出口掉落还是无法从出口掉落 能通过的情况为 即某条线为 其左边的线也是 箭头所指为当前斜线 即
  • ahut 月赛1

    心得 一点一点理解 对于一段要学习的代码 跟着写下来 理解一点写一点 对于一道题目 用记事本 看题目 看一句题目 用自己的话概括一句 写在记事本上 并将自己的 想法一并写下来 这样做下来 心会很平静 你会发现 理解一段代码并不费力 解决一道
  • 不同岛屿的数量

    694 不同岛屿的数量 这道题要给出不同岛屿的数量 最直观的想法就是对发现的不同岛屿进行序列化 然后把序列化结果存到HashSet 那怎么序列化呢 其实比较类似于二叉树的序列化 记录遍历顺序 方向 这里用 1 2 3 4 代表上下左右 1
  • 每天进步一点点【图的深度优先遍历(DFS)】

    图是一种数据结构 其中节点可以具有零个或多个相邻元素 两个节点之间的连接称为边 节点也可以称为顶点 图分为三种 无向图 有向图 带权图 图的表示方式有两种 二维数组表示 邻接矩阵 链表表示 邻接表 邻接矩阵 邻接矩阵是表示图形中顶点之间相邻
  • 深度、广度优先搜索

    文章目录 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 应用 2 2 广度优先搜索 BFS 基本操作 应用 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 Vertextype GetVex ALGraph G int v
  • [ACM] 1016 Prime Ring Problem (深度优先搜索)

    Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagram Put natural number 1 2 n into
  • Acwing-4653. 数位排序

    本题重点在于预处理每个数的各位之和 cmp函数的书写 根据题目中的描述 当两个数各个数位之和不同时 将数位和较小的排在前面 当数位之和相等时 将数值小的排在前面 不难写出cmp函数 快速排序的比较次数为nlogn次 本题中约为2 10 7
  • Leetcode【DFS BFS】

    Leetcode 200 岛屿数量 题目 解题 思路 DFS解法 BFS解法 题目 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成
  • Basic Level 1016 部分A+B (15分)

    题目 正整数 A A A的 D A D A DA 为1位整数 部分 定义为由 A
  • Acwing 842. 排列数字

    dfs int u 搜索第u个位置上可以放哪个数字 include
  • Ansys workbench 云图如何不显示边框

    由于对workbench不熟悉 走了很多弯路 云图上有边框总是不好看 但是又不知道在哪里关掉它 经过一番摸索终于找到了 关闭前 关闭方法 工具栏 WireFrame 按钮 点一下即可 希望对有需要的朋友有用
  • P1433 吃奶酪 题解(勿抄袭)

    P1433 吃奶酪 题目描述 房间里放着 n 块奶酪 一只小老鼠要把它们都吃掉 问至少要跑多少距离 老鼠一开始在 0 0 点处 输入格式 第一行一个正整数 n 接下来每行 2 个实数 表示第i块奶酪的坐标 两点之间的距离公式为 输出格式 一
  • VMware 中搭建 SylixOS 环境

    1 制作 x86 平台 U 盘启动盘 详细步骤见 RealEvo IDE 使用手册 第八章 制作成功后插入 U 盘 2 创建 VMware 虚拟机设备 打开 VMware 这里使用版本为 15 5 6 点击 创建新的虚拟机 按如下步骤创建虚
  • “挖矿”【题解】

    题目 题目描述 有N名矿工在挖矿 工厂预先给第i名矿工支付了M i 元工资 他每挖一吨矿需要消费K i 元 如果他手头余下的钱不足K i 元 他就停止挖矿 他每挖一吨矿 工厂会立即奖励他2元钱 奖励的钱也可以用 于挖矿的消费 给出矿工的信息

随机推荐

  • python接口自动化测试 ( 第三章)

    如果你不太明白这篇文章是做什么的 点击下方进入介绍篇 点击跳转到介绍篇 你可以知道自己能收获什么 和将要做的功能点和是否值得学习 别再迷茫了 不日进 则日退 学习才是你应该做的事情 进入介绍篇了解你将要走的路 python接口自动化测试 第
  • abapdata定义方法_ABAP中types与data,type与like的区别

    1 types与data区别 types是用来自定义某种类型的 需要data实例化才能使用 data是用来声明基本类型数据对象 也就是实例变量 对于用data直接定义的结构体对象 不参照其它结构类型 参照自定义类型生成新数据语法格式 TYP
  • 快速记忆电阻器色环值

    快速记忆电阻器色环值 觉得有用麻烦点个赞哦 开始正文 最近准备电设 看到电阻器11种色环 实在难记 因此花了我整整5 分钟 想出了一个快速记忆的方法 直接上图 上图是标准色环和阻值对应表 下面是我的简记方法 1 谐音组词记忆yyds 2 简
  • Mysql 主从复制

    简述 start slave show slave status G stop slave reset slave delete relay log create relay log reset master delete bin log
  • langchain包下载安装以及基本使用的注意事项

    当我们使用import langchain导入包是需要先下载langchain这个包 注意事项 我们的python版本必须大于等于3 8 1 否者将会导致 cannot import name RecursiveCharacterTextS
  • python三维点云投影(一)

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 一 立体几何基础知识
  • MySQL的多表查询

    目录 多表关系 一对多 多对多 一对一 多表查询概述 分类 显示内连接 外连接 左外连接 右外连接 自连接 联合查询 子查询 分类 标量子查询 列子查询 行子查询 表子查询 多表关系 项目开发中 在进行数据库表结构设计时 会根据业务需求及业
  • 链表介绍

    链表介绍 链表与顺序表一样 也属于线性表 一个线性表是某类数据元素的一个集合 表里同时记录着元素之间的顺序关系 线性表的数据之间有顺序关系 顺序关系分为两种 一种是物理有序 即数据物理存储的位置顺序与数据之间的顺序关系一致 另一种是逻辑有序
  • VS Stuidio 2019实用调试技巧

    VS Studio 2019实用调试技巧 1 debug和release的区别 2 调试 1 调试最常使用的几个快捷键 2 用监视窗口查看临时变量的值 3 查看内存信息 4 查看调用堆栈 5 查看汇编信息 6 查看寄存器信息 3 如何写出易
  • 总结Python设置Excel单元格样式的一切,比官方文档还详细

    总结Python设置Excel单元格样式的一切 比官方文档还详细 Python对Excel表格处理非常方便 本文专门对Excel单元格样式设置进行总结 日常用到的设置基本都可以用openpyxl库完成 创建一个表格 openpyxl是第三方
  • 多项式轨迹--五次多项式轨迹

    转自 https blog csdn net libing403 article details 78715418 多项式轨迹 五次多项式轨迹 1 5 Polynomial of degree five 利用三次多项式 根据过q0 q1 q
  • 祝:天下码农中秋节快乐

    祝 天下码农中秋节快乐
  • 13.2 C语言风格的for命令、while命令和until命令

    C语言风格的for命令 在C语言中 for循环通常定义ige变量 然后这个变量会在每次迭代时自动改变 c语言的for命令 C语言的for命令有一个用来指明变量的特定方法 一个必须保持成立才能继续迭代的条件 以及另一个在每个迭代中改变变量的方
  • 算法设计与分析 动态规划 习题

    3 1 满足递归式F n F n 1 F n 2 和初始值F 0 F 1 1的数列称为斐波那契数列 考虑如何计算该数列的第n项F n 1 说明根据递归式直接完成计算 将有子问题重复求解 2 说明该问题具有优化子结构 3 写出求解F n 的动
  • 用matlab表白,你有一颗爱她的心,你就画出来

    恋爱过恋爱过程中 女生往往需要许多小惊喜 下面我教大家一种用matlab表白的一小段程序 画出一个火热的心 loving heart x y z x 2 9 4 y 2 z 2 1 3 3 x 2 z 3 9 80 y 2 z 3 爱心三维
  • Git 两分钟指南

    原文 http www garyrobinson net 2014 10 git in two minutes for a solo developer html作者 Gary Robinson 译文 http blog jobbole c
  • LeetCode【102】二叉树的层次遍历

    题目 给定一个二叉树 返回其按层次遍历的节点值 即逐层地 从左到右访问所有节点 例如 给定二叉树 3 9 20 null null 15 7 3 9 20 15 7 返回其层次遍历结果 3 9 20 15 7 通过观察返回的结果 可以直到是
  • ctfshow 每周大挑战 RCE极限挑战3

    目录 题目源码 1 跑一下正则 2 分析解题用什么payload 3 构造payload 如何获取字母N 构造出 POST及其他拼接内容 POST传参 4 完整解题payload 题目源码 1 跑一下正则 chr i echo chr i
  • 居中

    水平居中 1 HTML div class test img src images mlbtag jpg alt class test2 div CSS test width 100 test2 margin 0 auto display
  • Maximum Diameter Graph 【CodeForces - 1082D】【搜索+构造】

    题目链接 一开始忘记输出有多少条边 WA了好几发都跑不过第一组测试样例 开始怀疑自己是不是读了道假题 然后在大佬们的帮助下 终于AC 好伤心 读假样例 一定是我太弱了 我的思想是采用了树链剖分的dfs 构造思想 可能是因为最近少用了树链剖分