图论分类讨论 bzoj2503相框

「题解」相框(福建集训2011) 原题出处:福建集训 2011。 阅读详情

问题 B: 相框
时间限制: 1 Sec 内存限制: 256 MB
题目描述
【问题描述】
P大的基础电路实验课是一个无聊至极的课。每次实验,T君总是提前完成,管理员却不让T君离开,T君只能干坐在那儿无所事事。
先说说这个实验课,无非就是把几根导线和某些元器件(电阻、电容、电感等)用焊锡焊接起来。
为了打发时间,T君每次实验做完后都在焊接一些诡异的东西,这就是他的杰作:
T君不满足于焊接奇形怪状的作品,强烈的破坏欲驱使他拆掉这个作品,然后将之焊接成规整的形状。这会儿,T君正要把这个怪物改造成一个环形,当作自己的相框,步骤如下:
T君约定了两种操作:

  1. 烧熔一个焊点:使得连接在焊点上的某些导线相分离或保持相连(可以理解为:把焊点上的导线划分为若干个类,相同类中的导线相连,不同类之间的导线相离)

  2. 将两根导线的自由端(即未与任何导线相连的一端)焊接起来。

例如上面的步骤中,先将A点烧熔,使得导线1与导线2、4点分离;再将D点烧熔,使得4、5与3、7相离;再烧熔E,使7与6、8相离;最后将1、7相连。

T君想用最少的操作来将原有的作品改造成为相框(要用上所有的导线)。

【输入文件】
输入文件的第一行共有两个整数n和m:分别表示原有的作品的焊点和导线的数量 (0 ≤ n ≤ 1 000, 2 ≤ m ≤ 50 000)。焊点的标号为1~n。

接下来的m行每行共有两个整数:导线两端所连接的两个焊点的标号,若不与任何焊点相连,则将这一端标号为0。

原有的作品可能不是连通的。

某些焊点可能只有一根导线与之相连,在该导线的这一端与其他导线相连之前,这些焊点不允许被烧熔。

某些焊点甚至没有任何导线与之相连,由于T君只关心导线,因此这些焊点可以不被考虑。

【输出文件】
输出文件只包含一个整数:表示T君需要将原有的作品改造成相框的最少步数。

【输入样例1】
6 8

1 2

1 3

3 4

1 4

4 6

5 6

4 5

1 5

【输出样例1】
4

【输入样例2】
0 2

0 0

0 0

【输出样例2】
2

【输入样例3】
3 3

0 1

0 0

2 2

【输出样例3】
4

【数据规模和约定】
30%的数据中n≤10;

100%的数据中n≤1000。

图片自己去找。。。
因为最终情况要满足所有点的度数都是2(度数一开始就是0的点直接扔掉)所以我们要对所有度数大于2的点都要被熔烧。奇数的熔成一堆2度数的点+一个单个的点。
那么现在有两种情况
1. 只有一个联通块,也就是所有边都连在一起。只要把所有度数大于2的点熔成度数<=2的点,再把所有单个的点(熔出来的+本来就有的)两两配对组一起即可。自己试一下就是这样的,所以没必要管谁和谁连了。
2. 有多个联通块,就要把所有的联通块都变成环,然后把所有环再熔成一条链,再把所有链连起来。。。对于过程中出现1度数点的联通块只要少熔和一对就好了。如果没有1度数点,但在过程中有把偶数点熔成2度数点的过程,就可以把一对2度数点熔成两个单个的就好了。

联通块用并查集就行了。
但是那堆0很令人尴尬.。。每个0新建一个点就好了。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 101005
#define inf 1000000000
using namespace std;
int read()
{
    int sum=0,f=1;char x=getchar();
    while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}
    while(x>='0'&&x<='9'){sum=(sum<<1)+(sum<<3)+x-'0';x=getchar();}
    return sum*f;
}
int n,m,tot,ans,cnt,du[N],f[N],vis[N];
int s[N],p[N],belong[N];
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
int main()
{
    n=read();m=read();int x,y;tot=n;
    for(int i=1;i<=2*m;i++)f[i]=i;
    for(int i=1;i<=m;i++)
    {
        x=read();y=read();
        if(x==0)x=++tot;
        if(y==0)y=++tot;
        du[x]++;du[y]++;
        int fx=find(x),fy=find(y);
        f[fx]=fy;
    }
    for(int i=1;i<=tot;i++)
    {
        if(du[i]==0)continue;
        int fx=find(i);
        if(!vis[fx])vis[fx]=++cnt;
        belong[i]=vis[fx];
    }
    if(cnt==1)
    {
        int sum=0;
        for(int i=1;i<=tot;i++)
        {
            if(!du[i])continue;
            if(du[i]==1){sum++;continue;}
            if(du[i]&1){sum++;ans++;continue;}
            if(du[i]>2&&du[i]%2==0){ans++;}
        }
        printf("%d\n",ans+sum/2);
    }
    else
    {
        ans+=cnt;
        for(int i=1;i<=tot;i++)
        {
            if(!du[i])continue;
            if(du[i]==1){s[belong[i]]++;continue;}
            if(du[i]&1){s[belong[i]]++;ans++;p[belong[i]]=1;continue;}
            if(du[i]>2){ans++;p[belong[i]]=1;}
        }
        for(int i=1;i<=cnt;i++)
        {
            if(s[i]>0){ans+=s[i]/2-1;continue;}
            if(p[i]==0)ans++;
        }
        printf("%d\n",ans);
    }
}
超图容器方法如何加速SAT求解:原理、实现与性能分析 布尔可满足性问题(SAT)是计算机科学和人工智能领域的核心基础问题,广泛应用于形式化验证、自动推理和芯片设计。其求解本质是在复杂的逻辑约束网络中寻找可行解,传统冲突驱动子句学习(CDCL)算法将问题建模为普通图进行处理。然而,现实中的约束关系往往涉及多个变量,形成高阶关联,这催生了从图论中引入超图进行更精确建模的需求。超图容器方法通过识别超图中具有特殊结构(如稠密或稀疏)的顶点子集(容器),为算法提供了全局结构洞察。这一原理的核心技术价值在于,它能将计算资源智能地聚焦于问题的关键模块,优化变量分支顺序、精简 阅读详情

相关推荐

ADS1256单端vs差分接法详解:在STM32上实现8通道电压采集与4通道差分测量的实战对比

本文深入解析ADS1256在STM32平台上的单端8通道与差分4通道电压采集方案,详细对比两种接法的硬件设计、软件配置及性能差异。通过CubeMX配置SPI接口和优化数据读取时序,实现高精度测量,适用于工业监测等高要求场景。

weixin_29165465的博客 245

相框

题目描述 【问题描述】 P大的基础电路实验课是一个无聊至极的课。每次实验,T君总是提前完成,管理员却不让T君离开,T君只能干坐在那儿无所事事。 先说说这个实验课,无非就是把几根导线和某些元器件(电阻、电容、电感等)用焊锡焊接起来。 为了打发时间,T君每次实验做完后都在焊接一些诡异的东西,这就是他的杰作:     T君不满足于焊接奇形怪状的作品,强烈的破坏欲驱使他拆掉这个作品,然后

Hunter_HunterL的博客 701

T265摄像头插着开机后,需要重新插拔才能正常启动

T265摄像头插着开机后,需要重新插拔才能正常启动

qq_35598561的博客 1080

失望至极

失望至极 不知是csdn的博客不稳定还是,自己的技术有问题,注册之后就一直没能用过,直到现在现在决定 放弃它了

AJNS的专栏 2556

别再死记硬背了!用TwinCAT 3手把手教你配置EtherCAT伺服驱动的PDO映射(DS402协议)

本文详细介绍了如何使用TwinCAT 3配置EtherCAT伺服驱动的PDO映射(DS402协议),涵盖环境准备、设备扫描、PDO映射实战及高级技巧。通过具体操作步骤和常见问题排查,帮助工程师快速掌握EtherCAT通信配置,提升运动控制系统的效率和稳定性。

weixin_29185493的博客 323

[RK3399][Android7.1] 调试笔记 --- 编译GSL5680 touch提示错误

Platform: RK3399 OS: Android 7.1 Kernel: v4.4.83 现象: 之前在rk3288平台上使用过GSL5680的Touch,现在移植过来一直报如下错误: make[1]: `include/generated/vdso-offsets.h' is up to date. CHK include/generated/compi...

Kris Fei's blog 1056

【题解】相框

问题 B: 相框 时间限制: 1 Sec 内存限制: 256 MB 题目描述 【问题描述】 P大的基础电路实验课是一个无聊至极的课。每次实验,T君总是提前完成,管理员却不让T君离开,T君只能干坐在那儿无所事事。 先说说这个实验课,无非就是把几根导线和某些元器件(电阻、电容、电感等)用焊锡焊接起来。 为了打发时间,T君每次实验做完后都在焊接一些诡异的东西,这就是他的杰作: T君不满足于焊接奇形怪状的作品,强烈的破坏欲驱使他拆掉这个作品,然后将之焊接成规整的形状。这会儿,T君正要把这个怪物改造成一个环形,当作自

cqbzlydd的博客 1385

HC32F460 FPU实战:从零开启硬件浮点加速

本文详细介绍了如何在HC32F460开发板上启用和优化FPU(浮点运算单元),以显著提升硬件浮点运算性能。从工程配置、关键代码修改到实战优化技巧,全面解析FPU加速的实现方法,并分享常见问题的解决方案,帮助开发者避免常见陷阱,充分发挥HC32F460的硬件潜力。

weixin_42620340的博客 348

BZOJ 2503 相框 并查集

题目大意:给定一张无向图,每次可以进行以下两种操作: 1.将一个点分裂成一些点,原先这个点连接的每条边任选一个新点进行连接 2.将两个度数为1的点合并为1个点 求将这个图变成一个环的最小操作次数首先我们考虑拆 由于终态每个点度数最多为2,因此我们将每个度数大于2的点都拆成一些度数为2的点,如果有零头,留下一个度数为1的点 由欧拉通路的相关结论可知,按照这种拆法,一个有k(k>=2)k(k>

世界 1796

从IR Drop到EM分析:数字IC电源规划中那些没人明说的细节(以MTCMOS配置为例)

本文深入探讨数字IC后端设计中电源规划的关键细节,特别关注MTCMOS配置、电源网络电阻最小化和level shifter供电等实战技巧。通过分析IR Drop和EM问题,提供优化floorplan和powerplan的具体策略,帮助工程师避免常见陷阱,提升芯片设计的稳定性和可靠性。

q9w8e7r6t5的博客 511

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(四)-无人机系统(UAS)命令与控制(C2)通信用例

UTM向5G网络提供无人机系统C2通信所需的信息,例如服务类别、无人机系统服务的流量类型、授权的无人机系统服务所需的QoS以及无人机系统服务的订阅。遵循模型B的网络辅助C2模型,为了确保UAS操作的C2通信的服务可用性和可靠性,特别是当无人机在操作员的视线之外(BLOS)飞行时,为无人机提供支持冗余的C2通信链路。如果需要创建额外的C2通信连接或更改现有数据连接的配置以进行C2通信,则5G网络会根据无人机系统的授权服务信息和C2通信中所需的QoS和优先级,修改或分配一个或多个C2通信流量的QoS流。

u011376987的博客 2053

bzoj 2503 相框 欧拉回路

2503: 相框 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 108  Solved: 52 [Submit][Status][Discuss] Description        P大的基础电路实验课是一个无聊至极的课。每次实验,T君总是提前完成,管理员却不让T君离开,T君只能干坐在那儿无所事事。        先说说这个实验

hzoi_wangxh的博客 676

软件设计师考试下午题代码部分详解:23种设计模式全面解析

软件设计师考试的下午题通常会考察设计模式的应用,这部分内容既是重点也是难点。本文将系统地介绍考试中常见的23种设计模式,通过详细代码示例和通俗易懂的讲解,帮助考生掌握这些核心知识点,提高应试能力。概念:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用场景:系统要独立于产品的创建、组合和表示时;系统要由多个产品系列中的一个来配置时。@Override@Override@Override@Override// 产品族A@Override。

4万+

BZOJ 2503 相框 分类讨论

BZOJ 2503 相框 分类讨论

-Claude 1471

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【BZOJ-2503】相框 并查集 + 分类讨论

2503: 相框 Time Limit:3 SecMemory Limit:128 MBSubmit:71Solved:31[Submit][Status][Discuss] Description P大的基础电路实验课是一个无聊至极的课。每次实验,T君总是提前完成,管理员却不让T君离开,T君只能干坐在那儿无所事事。 先说说这个实验课,无...

weixin_30692143的博客 95

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

bzoj 2503 相框 分类讨论

题目大意:给定一张无向图,每次可以进行以下两种操作:1.将一个点分裂成一些点,原先这个点连接的每条边任选一个新点进行连接2.将两个度数为1的点合并为1个点求将这个图变成一个环的最小操作次数 我们简单画一画可以发现,整个的答案只与度有关。如果最后形成了一个环。那么环上的点的度一定为2不在环上的点则都为不连边的点,度一定为0我们一定要拆了所有度大于2的点。首先忽略所有度为0的点。现...

weixin_30644369的博客 76

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

bzoj2503 相框——思路

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2503 思路题; 首先,这种问题应该注意到答案只跟度数有关,跟其他什么连接方法之类的完全无关; 关注最终状态,每个点度数都是2,所以对于原来度数不是2的需要进行处理; 也就是度数大于2的进行一次操作分成若干个2,如果是奇数那么留下一个1的等待合并,可以知道最终一定有偶数个度数...

aodan5477的博客 170

bzoj 3170: [Tjoi 2013]松鼠聚会

3170: [Tjoi 2013]松鼠聚会 Description有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1。现在N个松鼠要走到一个松鼠家去,求走过的最短距离。Input第一行给出数字N,表示有多少只小松鼠。0<=N<=10^5 下面N行,每行给出x,y表示其家的坐标。 -10^9<=x,y<=10^9Ou

hzoi_wangxh的博客 392

bzoj 2503 相框——思路

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2503 我也知道应该只关注度数。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=1005,M=50005; ...

weixin_33893473的博客 192

bzoj2503 相框(思维题)(并查集)

题目 bzoj2503 相框 特性 如果原图是一个连通图,并且为欧拉回路,那么把所有点熔开即可。其实上面这句话是废话 一个多条边(&gt;2)连接的点一定要熔。 一个奇数条边相连的点一定是熔完后要接的。 题解 乱搞+并查集 其实上面的几条边相连都可以用“度”来表达。 所以得到一个乱搞算法: 1、每有一个多度点,ans++; 2、每有一个奇度点,cnt++。 对于那些自由边,另开一个点给它...

A_Bright_CH的博客 726

基础实验课日记(一)

今日学了简单操作linux,总结了几个常用命令系统提示符下输入”vi 回车” 进入vi编辑器,此编辑模式下操作命令有:x:删除光标处的字符。dd:删除光标所在一行。yy:将当前行的内容复制到缓冲区。(复制)p:将缓冲区中的内容写到光标所在的位置。(粘贴)zz:存盘退出。:q 回车:不保存退出。:wq 回车:保存文件。i:进入插入模式。在插入模式下可编写一些代码,按ESC后可退出插入模式返回编辑模式...

sifangege的博客 312

[并查集 思路题] BZOJ 2503 相框

%%% PoPoQQQ http://blog.youkuaiyun.com/popoqqq/article/details/48031135 #include #include #include #include using namespace std; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p

雯舞 616
上一篇: 高精+卡特兰数 bzoj3907网格
下一篇: 树规? bzoj4007 战争调度
QTY_
博客等级 码龄9年 13粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值