这道题目就是考验了一下图论基本知识与对可爱的代码实现的应对能力。

我们先分析题干信息。我们要形成相框,那么所有的点的度为2(参与的点),那么所有度大于2的点都需要熔断,而且一次完成所有关于这个点的熔断,也就是说将一个焊点变成一堆度小于等于2的焊点,然后我们发现我们这个时候只需要焊接了。由此可知我们熔断的次数是一定的(除了简单环,度为2的点不需要熔断,因为这样做只会做负贡献),就好是熔断所有度大于2的点以及独立简单环,那么现在我们要做的就是让焊接次数最少,也就是分成较少的链。对于独立欧拉图不用讲就是一条,对于存在奇数入度的点的图,我们观察,他最少的条数就是奇点的个数除二,因为所有链(相互独立不可合并)的两端的点一定是奇数点(如果是偶数点意味着有其他端点对着他那么这条路径就可以删去了),然后我们再看他的可行性我们如果用奇数点除二的边将这些点互相连接,就会存在欧拉图那么我们在去掉我们加上的边就会的到那些条路径。

于是我们找联通块,(特别的如果我们的图是一个简单环就输出0,如果我们的图是一个欧拉图我们就是只熔断),对于欧拉图联通块我们化成一条链,(特别的对于简单环我们手动熔断),对半欧拉图我们把它化成奇数点除二条链。

于此注意细节便可A。

#include <cstdio>
#include <cstring>
const int N=;
const int M=;
struct V{
int to,next;
}c[M<<];
int head[M<<],t;
inline void add(int x,int y){
c[++t].to=y,c[t].next=head[x],head[x]=t;
}
int n,m,sz,size[M<<];
bool v[M<<];
inline bool judge(){
if(n!=sz)return false;
for(int i=;i<=n;++i)
if(size[i]!=)return false;
return true;
}
void dfs(int x,int &sum,int &is){
if(v[x])return;
v[x]=true,sum+=(x>n||(size[x]&))?:;
if(size[x]!=)is=;
for(int i=head[x];i;i=c[i].next)
dfs(c[i].to,sum,is);
}
inline int get(){
int ret=,first=-,sum=,ou=-;
for(int i=;i<=sz;++i)
if(v[i]==false&&(size[i]!=||i>n)){
int num=,is=;dfs(i,num,is);
++sum;
if(num==)ret+=+is;
else ret+=num>>;
if(first==-)first=num,ou=is;
}
for(int i=;i<=n;++i)
if(size[i]>)
++ret;
if(sum==&&first==&&ou==)ret=;
if(sum==&&first==)ret--;
return ret;
}
int main(){
scanf("%d%d",&n,&m),sz=n;
for(int i=,x,y;i<=m;++i){
scanf("%d%d",&x,&y);
if(x)size[x]++;
else x=++sz;
if(y)size[y]++;
else y=++sz;
add(x,y),add(y,x);
}
printf("%d",get());
return ;
}

【BZOJ 2503】相框 图论+讨论的更多相关文章

  1. bzoj 2503 相框 分类讨论

    题目大意:给定一张无向图,每次可以进行以下两种操作: 1.将一个点分裂成一些点,原先这个点连接的每条边任选一个新点进行连接 2.将两个度数为1的点合并为1个点 求将这个图变成一个环的最小操作次数 我们 ...

  2. bzoj 2503 相框——思路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2503 我也知道应该只关注度数. #include<iostream> #incl ...

  3. bzoj 1067 分情况讨论

    这道题考察人的严谨,各种情况分类讨论. #include <cstdio> #include <algorithm> #include <map> #define ...

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

    2503: 相框 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 71  Solved: 31[Submit][Status][Discuss] Desc ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4399  Solved: 1182 [Submit][Stat ...

  7. 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]

    BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1655  Solved: 798[Submit][S ...

  8. 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil

    1177: [Apio2009]Oil Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1477  Solved: 589[Submit] Descri ...

  9. BZOJ 4086: [Sdoi2015]travel(SDOI2015 round2 day1)(分类讨论+容斥原理)

    描述:给定一张图(n<1000,m<5000)求有多少点对u,v有不重复经过其他点,共经过k个点的路径.(k<=7) 这个做法应该不是正解吧..顺便说下SDOI的几道题在BZ上都要卡 ...

随机推荐

  1. EpiiServer 更快捷更方便的php+nginx环境定制化方案

    EpiiServer是什么 更快捷更方便的php+nginx多应用部署环境. github仓库首页 https://github.com/epaii/epii-server gitee仓库 https ...

  2. 文件夹选项-安装功能-window服务

    我们初次使用windows10在显示一个文件的时候,可能不会将文件的扩展名显示出来,但是我们很多地方又需要更改文件的扩展名,打开文件的扩展名有两种方式 打开此电脑 ->>>点击右上方 ...

  3. CONCATENATE命令(文字列の結合)

    CONCATENATE命令とは文字列の結合を行う命令である.文字列を扱うChar, Numeric, Dats, Time, Stringの変数で使用する事が可能だ.単純に文字列の結合のみを行う方法. ...

  4. python的正则表达一

    一.常用的正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 ...

  5. 创龙DSP6748的DAC例程研究

    1. 创龙DSP6748开发板驱动TL5724这个DAC,输出指定的电压值,此程序是使用 IO 口模拟 SPI 实现与 TL5724 模块的数据交互. 2. 首先是初始化PSC函数 void PSCI ...

  6. golang select 退出结束goroutine

    开启了多个协程 其中一个协程满足条件后终止select, 原以为其他的协程会在后台系统中继续悄悄运行 直到主进程关闭而关闭 . 做一实验发现select 监听退出 会关闭所有监听的goroutine ...

  7. 【个人笔记】关于C++小数的处理

    无论是C-Style还是C++-Style的输出,小数都会四舍五入.如果想要截断两种比较好的方法.第一种:利用sscanf输出成字符串,再人为地putchar().第二种:已知钦定保留6位小数,那么可 ...

  8. iframe底边多出4px或5px解决办法

    问题: 在处理iframe框架自适应时,并且已经去掉iframe的边框,但仍然出现底边多出4px或5px高度的情况.如图 <div id="content"> < ...

  9. 接口测试工具postman(二)创建新项目

    1.此次添加一个request,可以点击左上角的New的下拉选择Request,或者点击New弹出选项框点击Request 2.弹出新增request页面 3.添加请求的参数等 4.也可以直接添加新请 ...

  10. 阿里云DTS VS MySQLdump

    云平台的到来,使得越来越多用户的数据库由云下迁到云上.对于这种情况,阿里对此提出两种方案,一种是MySQL自带的MySQLdump,另外一种就是阿里云的DTS. DTS支持异构数据源之间的数据迁移同步 ...