Even Degree【2020 年 “游族杯”E题】【欧拉回路】

2023-11-16

题目链接


  题意:有N个点,M条边,每次可以删去一条两端点的度不都是奇数的边,问最多可以删除几条边?题目保证初始所有点度为偶数。

  首先,题目保证了初始的时候所有的点的度都是为偶数的,于是原图中的每一个联通块一定是一个欧拉回路,对于欧拉回路,最好的情况下,一定是最后剩下一条边,链接着两个度为1的点,并且一定是可以如此满足的。

  于是,对于每个有mm条边的联通块,一定会有mm-1条边是可以删去的,但是具体怎么删去呢?我们不能直接按着欧拉回路的跑法直接删去,会有这样的bug:

具体:如果我们先删除第一条边,再删除的是第二条边,实际上,第二条边的两个端点都是奇数度了。

  所以,为了避免这样的情况,我们可以假设现在的是去除一条边的欧拉通路——欧拉回路删除一条边后,形成两个奇数点,变成一个典型的欧拉通路。于是,我们就可以得到了两个奇数点了,作为欧拉通路的起点和终点,每次进行删除边,实际上就是在改变欧拉通路的起点或者是终点,这里可以自己画图进行观察得到。

  于是,作为欧拉通路,我们只需要不选起点和终点构成的边就可以了,于是可以用两边同时判断来进行取的方式来进行区分。保证不取到起、终点,同时维护好了欧拉图的性质。

5 7
1 4
1 3
1 2
1 2
2 3
2 5
4 5
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 5e5 + 7;
int N, M, head[maxN], cnt;
bool vis[maxN] = {false};
struct Eddge
{
    int nex, to, id;
    Eddge(int a=-1, int b=0, int c=0):nex(a), to(b), id(c) {}
} edge[maxN << 1];
inline void addEddge(int u, int v, int id)
{
    edge[cnt] = Eddge(head[u], v, id);
    head[u] = cnt++;
}
inline void _add(int u, int v, int id) { addEddge(u, v, id); addEddge(v, u, id); }
pair<int, int> pir[maxN];
vector<int> ans;
int Stap[maxN], Stop;
void dfs(int u)
{
    int v, i;
    while(~head[u])
    {
        i = head[u];
        v = edge[i].to;
        head[u] = edge[i].nex;
        if(vis[edge[i].id]) continue;
        vis[edge[i].id] = true;
        dfs(v);
        Stap[++Stop] = edge[i].id;
    }
}
void Del()
{
    int l = 2, r = Stop;
    int old_u = pir[Stap[1]].first, old_v = pir[Stap[1]].second, now_u, now_v;
    ans.push_back(Stap[1]);
    while(l < r)
    {
        now_u = pir[Stap[r]].first; now_v = pir[Stap[r]].second;
        if(min(old_u, old_v) != min(now_u, now_v) || max(old_u, old_v) != max(now_u, now_v))
        {
            ans.push_back(Stap[r--]);
            if(old_u == now_u) old_u = now_v;
            else if(old_u == now_v) old_u = now_u;
            else if(old_v == now_u) old_v = now_v;
            else if(old_v == now_v) old_v = now_u;
        }
        else
        {
            now_u = pir[Stap[l]].first; now_v = pir[Stap[l]].second;
            ans.push_back(Stap[l++]);
            if(old_u == now_u) old_u = now_v;
            else if(old_u == now_v) old_u = now_u;
            else if(old_v == now_u) old_v = now_v;
            else if(old_v == now_v) old_v = now_u;
        }
    }
}
inline void init()
{
    cnt = 0;
    for(int i=1; i<=N; i++) head[i] = -1;
}
int main()
{
    scanf("%d%d", &N, &M);
    init();
    for(int i=1, u, v; i<=M; i++)
    {
        scanf("%d%d", &u, &v);
        _add(u, v, i);
        pir[i] = make_pair(u, v);
    }
    for(int i=1; i<=N; i++)
    {
        Stop = 0;
        dfs(i);
        if(Stop) Del();
    }
    int len = (int)ans.size();
    printf("%d\n", len);
    for(int i=0; i<len; i++) printf("%d%c", ans[i], i == len - 1 ? '\n' : ' ');
    return 0;
}

 

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

Even Degree【2020 年 “游族杯”E题】【欧拉回路】 的相关文章

  • LeetCode-剑指 Offer II 114. 外星文字典,BFS 搜索算法及图的表示

    剑指 Offer II 114 外星文字典 现有一种使用英语字母的外星文语言 这门语言的字母顺序与英语顺序不同 给定一个字符串列表 words 作为这门语言的词典 words 中的字符串已经 按这门新语言的字母顺序进行了排序 请你根据该词典
  • hdu 2586 How far away ?

    Problem acm hdu edu cn showproblem php pid 2586 Meaning 给一棵 n 个点的树 和 n 1 条边的边权 多次询问树上两点的距离 Analysis 以任意顶点为根 DFS 预处理出所有结点
  • lambda

    外部变量访问方式说明符 不捕获任何变量 以引用方式捕获所有变量 用值的方式捕获所有变量 可能被编译器优化为const foo 以引用捕获foo 但其余变量都靠值捕获 foo 以值捕获foo 但其余变量都靠引用捕获 bar 以值方式捕获bar
  • Supermarket 【POJ - 1456】【并查集+哈希表思想+贪心】

    题目链接 原来 并查集还有这样的作用 题记 我想用个哈希表的思维来解这道题 但是 显然O N 2 的哈希表去查询并插入显然是不行的 那么既然挂在图论专题 我就得用相应的方式解答咯 要是不挂在图论专题 我可能会自闭了 我们对于每个物品按照价值
  • P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib【普及】

    USACO1 5 特殊的质数肋骨 Superprime Rib 题目描述 农民约翰的母牛总是产生最好的肋骨 你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们 农民约翰确定他卖给买方的是真正的质数肋骨 是因为从右边开始切下肋骨 每次
  • The Stable Marriage Problem 【HDU - 1914】【稳定婚姻匹配问题】

    题目链接 Problem Description The stable marriage problem consists of matching members of two different sets according to the
  • 迪杰斯特拉算法浅析

    所谓的迪杰斯特拉算法 就是一个用来求一个图中某点到其它点的最短路径的算法 大致方法 遍历所有节点 找到离起点最近的一个点 那么这个点到起点的最小距离肯定是起点到这个点的这条边的权值 然后标记这个点被使用过了 以1中的那个点为中继 更新其它节
  • 《算法图解》读书笔记(二)

    第六章 图 广度优先搜索 1 解决最短路径问题 shortest path problem 的算法被称为广度优先搜索 breadth first search 2 图由节点 node 和边 edge 组成 一个节点可能与众多节点直接相连 这
  • 最长公共上升子序列(LCIS)

    前置知识 LCS LIS 注意 刚开始看这个问题的时候 第一反应是先求出LCS再求出LCS的LIS 事实上这是有问题的 我们并不能保证这么求出的LCIS是最长的 比如下面这个例子 Example a 7 1 5 6 4 2 7 b 7 1
  • Codeforces Round #751 (Div. 2) D. Frog Traveler(BFS)

    题解 因为我们最多把所有的点跳一遍么 所以直接BFS模拟一下就行了 注意现在跳的点不能是以前已经跳过的点 并且只能越跳越高 否则没有意义 这样就保证了时间复杂度是线性的 AC代码 include
  • 数据结构练习题——图(含应用题)

    1 选择题 1 在一个图中 所有顶点的度数之和等于图的边数的 倍 A 1 2 B 1 C 2 D 4 答案 C 2 在一个有向图中 所有顶点的入度之和等于所有顶点的出度之和的 倍 A 1 2 B 1 C 2 D 4 答案 B 解释 有向图所
  • 蓝桥杯 题库 简单 每日十题 day2

    01 卡片 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小蓝有很多数字卡片 每张卡片上都是数字 0 到 9 小蓝准备用这些卡片来拼一些数 他想从 1 开始拼出正整数 每拼一个 就保存起来 卡片就不能用来
  • UVA-10603 倒水问题 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 使用广度优先搜索和优先队列 如果找到最小的点则退出 找不到就遍历所有的情况 include
  • 图论算法<三>:判断有向图中是否有存在循环 ,以及环的个数和各个环中的元素

    1 目的 判断有向图中是否有存在循环 以及环的个数和各个环中的元素 2 示例效果 2 1 原始数据 路线起终点整理如下 共计12个顶点 19条边 起点 终点 1 最后的1代表起点终点是连通的 起点 终点 1 2 4 1 起点 终点 1 9
  • Two Arithmetic Progressions

    Two Arithmetic Progressions 题目链接 题意 思路 AC代码1 include
  • How far away ? 【HDU - 2586】【DFS+链式前向星优化】

    题目链接 其实这道题可以不用链式前向星优化换做vector lt gt 也是可以跑的 只是会许会慢些而已 来换个中文题意好读些 勇气小镇是一个有着n个房屋的小镇 为什么把它叫做勇气小镇呢 这个故事就要从勇气小镇成立的那天说起了 修建小镇的时
  • 1345:香甜的黄油(Dijkstra)---信息学奥赛一本通

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法 糖 把糖放在一片牧场上 他知道N 1 N 500 只奶牛会过来舔它 这样就能做出能卖好价钱的超甜黄油 当然 他将付出额外的费用在奶牛上 农夫John很狡猾 像以前的巴甫洛夫 他知道
  • 2023杭电暑假多校4 题解

    3 Simple Set Problem 题意 k 个多重集合 每个集合选出一个数形成新集合A 求 m a x A m
  • 图 - Java实现无向带权图的邻接矩阵表示法

    图 Java实现无向带权图的邻接矩阵表示法 1 图 1 1 图的介绍 图 Graph 是一种复杂的非线性表结构 图中的元素我们就叫做顶点 vertex 图中的一个顶点可以与任意其他顶点建立连接关系 我们把这种建立的关系叫做边 edge 跟顶
  • 有向图的拓扑排序

    给定一个 nn 个点 mm 条边的有向图 点的编号是 11 到 nn 图中可能存在重边和自环 请输出任意一个该有向图的拓扑序列 如果拓扑序列不存在 则输出 1 1 若一个由图中所有点构成的序列 AA 满足 对于图中的每条边 x y x y

随机推荐

  • 软考高项之运筹学

    1 最大最小准则 积极 平稳 消极 A 100 50 20 B 200 150 60 C 500 300 200 A min 20 B min 60 C min 200 最小值中取最大值为200 2 最大最小后悔原则 积极 平稳 消极 A
  • QT调用VS编译的RabbitMQ-C静态库

    为此折腾两天 参考了不少大神的文章 再次标识感谢 把自己的一些思路简单记录下 https blog csdn net qq 70244454 article details 128086920 https blog csdn net zjz
  • java字母和数据混合排序

    import java util ArrayList import java util List public class Sort param args public static void main String args TODO A
  • 用Zotero在word中添加参考文献的方法记录

    插件安装 首先 安装了zotero的话应该默认会安装word插件 如果word里面有这个选项卡 就行 如果没有的话 可以手动安装一下 方法参见官网 word中打开文件 选项 高级 常规 文件位置 启动 修改 不要修改 而是复制一下这个路径
  • 用桥接伪标签训练测试间隙改进弱监督时序动作定位(CVPR 2023)

    Improving Weakly Supervised Temporal Action Localization by Bridging Train Test Gap in Pseudo Labels CVPR 2023 论文地址 2304
  • sel4白皮书翻译

    首发地址 http trialley top pages 53ac44 CSDN地址 https blog csdn net lgfx21 article details 117606097 翻译与转发许可 作者 Gernot Heiser
  • 方方格子授权码_OAuth2入门(三)——Authorization Code授权模式

    1 前言 前面的文章讲到 oauth支持四种授权模式 简化模式 implicit 授权码模式 authorization code 密码模式 resource owner password credentials 客户端模式 client
  • 拆分android项目导致run Configurations消失了

    事件缘由 由于APP要拆分成两个 把原来的APP从svn上面下载下了 重新上传到新的svn目录上 再次重svn上面下载下来到本地新文件夹是直接用svn来运行时 发现原来run Configurations 不见了 重新编译同步啥的都没有用
  • 软件测试工具介绍和使用

    此次为软件工程实践专题 个人博客第四次作业 请使用一些其他平台上的测试工具 并写博客介绍如何在你的项目中具体使用 一 JMeter 介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具 是100 纯JAVA桌面
  • 多线程数据库连接管理1

    最近公司项目需求 要从oracle往mysql迁移存量1 2亿数据 处理逻辑比较复杂 硬件方面 对机器性能要求较高 软件方面 受制于外部服务能力 因此 在开发过程中 需要特别注意各方面资源的管理 及时释放占用的资源 调优过程中 数据库方面遇
  • OSI七层模型与TCP/IP五层模型

    一 OSI参考模型 今天我们先学习一下以太网最基本也是重要的知识 OSI参考模型 1 OSI的来源 OSI Open System Interconnect 即开放式系统互联 一般都叫OSI参考模型 是ISO 国际标准化组织 组织在1985
  • 用友时空KSOAV9.0文件上传漏洞复现

    一 使用fofa进行资产搜集 语句 app 用友 时空KSOA 访问相关页面 二 漏洞地址 文件上传 POST servlet com sksoft bill ImageUpload filename test jsp filepath 使
  • vue实现列表数据分页

    在开发过程中 当数据不是非常多的时候 前端来处理列表数据的分页 下面分享几个关键的步骤代码 1 请求全部数据过来 getList let params inParams this axios url httpUrl assetsIpArea
  • List中添加多种数据类型 反射

    原文参考地址 http blog csdn net sinat 28789467 article details 57415998 总结来说 以下代码 ArrayList
  • 面试题(1)封装c++

    前言 在学习的过程中我开始积累面试题 让我们一起开始学习 进步吧 卷起来 封装的定义 定义 将数据和操作数据的方法进行有机结合 隐藏对象的属性和实现细节 仅对外公开接口来和对象进行交互 封装本质上是一种管理 就好比如办画展的时候我们要把画用
  • RSA算法简介

    RSA算法简介 一 RSA算法简述 在RSA密码体制中 每个用户都拥有两个密钥 公钥PK e n 和私钥SK d n 公钥PK e n 用于加密 也成为加密密钥 可以再网络 电话簿等媒体上进行公布 私钥SK d n 用于解密 也称为解密密钥
  • 刀片式服务器与虚拟机,为什么人们在开发虚拟主机时更喜欢刀片服务器?

    服务器制造商正在不断开发刀片技术 因此刀片服务器的处理器性能和内存容量已达到10年前的超级计算机水平 毫无疑问 刀片服务器曾经实现了 事半功倍 的承诺 但现在需要重新考虑这个问题 人们为什么在虚拟主机的开发中更喜欢刀片服务器 使刀片服务器缺
  • 为什么mysql source命令导入数据比可视化工具执行sql文件快?

    在一般情况下 使用MySQL的source命令导入数据比使用可视化工具执行SQL文件更快 这是因为涉及到了不同的执行方式和优化策略 批量执行 vs 逐条执行 source命令会将整个SQL文件作为一个批量进行执行 而可视化工具往往是逐条读取
  • VS Code搭配code runnner编译时提示:g++: fatal error: no input files解决方法

    如下图所示 如果我们使用的是windows系统 当我们编写好C 文件之后 执行run code命令 就会出现的下面的错误提示 g error testCodeRunnner cpp No such file or directory g f
  • Even Degree【2020 年 “游族杯”E题】【欧拉回路】

    题目链接 题意 有N个点 M条边 每次可以删去一条两端点的度不都是奇数的边 问最多可以删除几条边 题目保证初始所有点度为偶数 首先 题目保证了初始的时候所有的点的度都是为偶数的 于是原图中的每一个联通块一定是一个欧拉回路 对于欧拉回路 最好