CF1994F Stardew Valley(欧拉回路)

题意简述

给定 n 个点 m 条边,每条边分为关键边和非关键边,你需要构造一条回路,使得每条边被至多经过一次,而关键边恰好被经过了一次,无解输出 -1。保证所有关键边将原图连通。

n,m5×105

分析

先做一个比较关键的题意转化:求是否可以将图上的一些非关键边删掉,使得原图存在欧拉回路。

而欧拉回路存在的充要条件是图连通且所有点的度数为偶数,由于图保证连通所以只需考虑后一个条件。设 degi 表示 i 点度数的奇偶性。“加入一条边”就相当于反转边的端点的奇偶性。由于关键边必然存在,所以先强制把关键边加入,问题转化为现在每个点有一个 degi 的权值,可以选择一些边加入,使得所有点的 degi=0

而这是一个经典问题:对所有非关键边求出一颗 DFS 树森林,考虑从下往上转移,对于一条树边 (u,v),depu<depv,若 degv=1,则选出这条边;否则不选。若森林的每棵树的根节点的 deg 都是 0 就合法,否则不合法。在此不做证明。还有一个小扩展:若有解,无论非树边选还是不选,都存在一个给树边定缺的方案使得解合法(只需要把非树边两端在树上的路径上的边状态取反即可)。

求出来了要加入的非关键边之后只需要建新图跑欧拉回路即可。线性。

作者:dcytrl

出处:https://www.cnblogs.com/dcytrl/p/18448268

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   dcytrl  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示