博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2503相框
阅读量:4664 次
发布时间:2019-06-09

本文共 2122 字,大约阅读时间需要 7 分钟。

   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君想用最少的操作来将原有的作品改造成为相框(要用上所有的导线)。 

Input

输入文件的第一行共有两个整数nm — 分别表示原有的作品的焊点和导线的数量 (0 ≤ n ≤ 1 000, 2 ≤ m ≤ 50 000)。焊点的标号为1~n。 接下来的m行每行共有两个整数 — 导线两端所连接的两个焊点的标号,若不与任何焊点相连,则将这一端标号为0。

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

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

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

Output 

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

Sample Input

6 8
1 2
1 3
3 4
1 4
4 6
5 6
4 5
1 5

Sample Output

4

HINT

30%的数据中n≤10;

100%的数据中n≤1000。

#include
#define re return#define inc(i,l,r) for(int i=l;i<=r;++i)using namespace std;template
inline void rd(T&x){ char c;bool f=0; while((c=getchar())<'0'||c>'9')if(c=='-')f=1; x=c^48; while((c=getchar())>='0'&&c<='9')x=x*10+(c^48); if(f)x=-x;}const int maxn=200005;int n,m,ans,cnt,melt[maxn],rela[maxn],fa[maxn],d[maxn];inline int find(int x){ re x==fa[x]?x:fa[x]=find(fa[x]);} int main(){ freopen("in.txt","r",stdin); int x,y,f1,f2; rd(n),rd(m); inc(i,1,maxn)fa[i]=i; inc(i,1,m) { rd(x),rd(y); //一端为0 等同于连接了一个新开的节点 //如果全部放入0内还要剪边 if(!x)x=++n; if(!y)y=++n; ++d[x];++d[y]; f1=find(x);f2=find(y); if(f1!=f2)fa[f1]=f2; } int num=0; inc(i,1,n) { find(i); if(!d[i])fa[i]=0; if(d[i]>2)++cnt,++melt[fa[i]];//要熔点 if(d[i]%2)++ans,++rela[fa[i]];//有多余的点 if(i==fa[i]&&d[i])++num;//记录连通块个数 } if(num>1) { inc(i,1,n) if(fa[i]==i&&(!rela[i]))//如果一个连通块没有与外借相连 { if(!melt[i]) ++cnt; ans+=2;//可以熔成两个多余点与外界相连 } } printf("%d",cnt+(ans>>1)); re 0;}

 

转载于:https://www.cnblogs.com/lsyyy/p/11422912.html

你可能感兴趣的文章
springmvc.xml配置
查看>>
C primer plus 学习随笔(1)
查看>>
Java 哈希表运用-LeetCode 1 Two Sum
查看>>
【codeforces 548B】Mike and Fun
查看>>
【2017 Multi-University Training Contest - Team 4】Counting Divisors
查看>>
ASP .NET数据写入oracle数据库
查看>>
shiro添加注解@RequiresPermissions不起作用
查看>>
wxwidgets和CodeBlocks+mingw在win7下安装和配置
查看>>
69道Spring面试题和答案
查看>>
android DIY 2
查看>>
[福大软工] Z班——个人技术博客评分
查看>>
sharepoint2010匿名访问
查看>>
插入排序 | 冒泡排序 | 希尔排序 | 堆排序 | 快速排序 | 选择排序 | 归并排序
查看>>
【转】android截屏代码:C++实现
查看>>
常见的编码陷阱
查看>>
JSP自定义标签
查看>>
SQL语句优化
查看>>
机房收费系统重构初期问题总结
查看>>
linux试题
查看>>
Windows Phone 7 Coding4Fun控件简介
查看>>