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

我们先分析题干信息。我们要形成相框,那么所有的点的度为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. python mac下安装虚拟环境

    Mac 下 Flask 框架 workon命令找不到 ---- 最终解决方案(详解具体实现操作过程中遇到的坑) Mac 下 Flask 的 全网最详细搭建 1.安装virtualenv和virtual ...

  2. Sql Server 游标概念与实例

    引言 先不讲游标的什么概念,看如下Sql Server2008 图例: 需求:两张表的O_ID是一一对应的,现在求将加薪的工资+原来的工资=现在的工资,也就是O_Salary=O_Salary+A_S ...

  3. Android——搜索传统蓝牙设备

    一,主布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ...

  4. LeetCode:22. Generate Parentheses(Medium)

    1. 原题链接 https://leetcode.com/problems/generate-parentheses/description/ 2. 题目要求 给出一个正整数n,请求出由n对合法的圆括 ...

  5. Andrid 打印调用堆栈

    public static void printCallStatck() { Throwable ex = new Throwable(); StackTraceElement[] stackElem ...

  6. 【PHP】进一法取整、四舍五入取整、忽略小数等的取整数方法大全

    PHP取整数函数常用的四种方法,下面收集了四个函数:经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已--主要是:ceil,floor,round,intval PHP取整数函数常用 ...

  7. 网易云terraform实践

    此文已由作者王慎为授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.terraform介绍 随着应用上云的常态化,资源栈动态管理的需求对用户也变得更加急切.资源编排(Res ...

  8. jq 一个强悍的json格式化查看工具

    本文来自网易云社区 作者:娄超 在web 2.0时代json这种直观.灵活.高效数据格式基本已经成为一种标准格式,从各种web api,到配置文件,甚至现在连mysql都开始支持json作为数据类型. ...

  9. 获得通讯录并拨打电话 Android

    由于通讯录在手机里是以数据库贮存的 所以我们可以通过getContentResolver来获得通讯录 ,这个方法返回一个游标的数据类型,通过moveToNext()方法来获取所有的手机号码信息, 当然 ...

  10. Android PopupWindow 疑难杂症之宽度WRAP_CONTENT

    一直以来都觉得 Android 中的 PopupWindow 不好用.主要有以下两点:1.宽度不好控制2.位置不好控制 今天单说第1点. 由于应用有好几种国家的语言,加上各设备宣染效果不完全一样,对p ...