Einstein学起了画画,
此人比较懒~~,他希望用最少的笔画画出一张画。。。
给定一个无向图,包含 n 个顶点(编号1~n),m 条边,求最少用多少笔可以画出图
中所有的边

Input (draw.in)

第一行2个数n,m
以下m行每行 2个数a,b(a<>b) 表示a,b两点之间有一条边相连
一条边不会被描述多次

Output (draw.out)

一个数即问题的答案

Sample

Input 
5 5
2 3
2 4
2 5
3 4
4 5

output

1

约定

50%的数据n<=50,m<=100
100%的数据n<=1000,m<=100000

思路

  求一个无向图中有几个哈密尔顿路。也是求边的一笔画问题。

  概念补充

  奇点就是从这个点出发的线有奇数条,偶点就是从这个点出发的线有偶数条.

  关键部分

  如何判断一个图形是否可以一笔不重地画出

  ■⒈凡是由偶点组成的连通图,一定可以一笔画成。画时可以把任一偶点为起点,最后一定能以这个点为终点画完此图。

  ■⒉凡是只有两个奇点的连通图(其余都为偶点),一定可以一笔画成。画时必须把一个奇点为起点,另一个奇点终点。

  ■⒊其他情况的图都不能一笔画出。(奇点数除以二便可算出此图需几笔画成。)

  易错点

   注意此题可能图不是联通的,由样例就可以看出它是一个单独的点加上一个连通图。

     再比如这个例子,单纯的按照一般的算法写出来答案是1,显然答案是2,所以要统计输入数据中联通图的数量,再分别进行求解。并查集可以实现。

  

var n,m,i,u,v,sum1,sum2,mid:longint;
b,f:array[..] of longint; procedure intt;
begin
assign(input,'draw.in');
assign(output,'draw.out');
reset(input);
rewrite(output);
end; procedure outt;
begin
close(input);
close(output);
end; procedure sort(l,r: longint);
var
i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=f[(l+r) div ];
repeat
while f[i]<x do
inc(i);
while x<f[j] do
dec(j);
if not(i>j) then
begin
y:=f[i];
f[i]:=f[j];
f[j]:=y;
y:=b[i];
b[i]:=b[j];
b[j]:=y;
inc(i);
j:=j-;
end;
until i>j;
if l<j then
sort(l,j);
if i<r then
sort(i,r);
end; function root(x:longint):Longint;
begin
if f[x]=x then exit(x) else root:=root(f[x]);
f[x]:=root;
exit(root);
end; begin
intt;
readln(n,m);
for i:= to n do f[i]:=i;
for i:= to m do
begin
read(u,v);
if root(u)<>root(v) then
f[root(u)]:=root(v);
inc(b[u]);
inc(b[v]);
end;
for i:= to n do mid:=root(i);
sort(,n);
v:=n;
while v> do
begin
while f[v-]<>f[v] do dec(v);
inc(sum2);
mid:=f[v];
while f[v]=mid do
begin
if b[v] mod = then inc(sum1);
dec(v);
end;
if sum1> then sum1:=sum1-;
sum2:=sum2+sum1 div ;
sum1:=;
end;
writeln((sum1 div )+sum2);
outt;
end.

[JCWC2005]Draw的更多相关文章

  1. 深入浅出聊优化:从Draw Calls到GC

    前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...

  2. Direct3D Draw函数 异步调用原理解析

    概述 在D3D10中,一个基本的渲染流程可分为以下步骤: 清理帧缓存: 执行若干次的绘制: 通过Device API创建所需Buffer: 通过Map/Unmap填充数据到Buffer中: 将Buff ...

  3. Unity性能优化之 Draw Call原理<转>

    Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置.法线.UV等),索引(顶点如 ...

  4. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板

    很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...

  5. OpenCascade Draw Test Harness

    OpenCascade Draw Test Harness eryar@163.com Abstract. Draw is a command interpreter based on Tcl/Tk ...

  6. 移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)

    背景: 本人的一个移动端H5项目,需求如下: 需求一:手机相册选取或拍摄照片后在页面上预览 需求二:然后绘制在canvas画布上 这里,我们先看一个demo(http://jsfiddle.net/q ...

  7. Android UI 绘制过程浅析(四)draw过程

    前言 draw是绘制View三个步骤中的最后一步.同measure.layout一样,通常不对draw本身进行重写,draw内部会调用onDraw方法,子类View需要重写onDraw(Canvas) ...

  8. 优化 从Draw Calls到GC

    原文出处: 慕容小匹夫的博客(@慕容小匹夫)   欢迎分享原创到伯乐头条 前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章 ...

  9. VC++ 在使用 CImage 的Draw 输入一个图像时,有时候会造成图像失真严重,解决的方法如下

    VC++  在使用 CImage 的Draw 输入一个图像时,有时候会造成图像失真严重,解决的方法如下 失真主要是由于变形造成的.只要设置一下变形的模式就可以了 ::SetStretchBltMode ...

随机推荐

  1. javascript函数基础

    Function类型 由于函数是对象,因此函数名实际上是一个指向函数对象的指针,不会与函数绑定 所以没有重载这个概念!!!!!!!!!!!!!!!!!!!!!!!!!! function sum1() ...

  2. javascript学习笔记4

    1. 分析一下代码执行结果 分析为什么? var  a = 12;  b = 34; c = 56; ++a;    //a结果 13 a++;    //a结果 14 c = ++a + b;   ...

  3. php文本操作方法集合

    fgets和fputs.fread和fwrite.fscanf和fprintf 字符串读写函数fgets和fputs  一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函 ...

  4. 企业生产环境下不同业务的linux分区建议

    常规分区方案: /boot:  100M swap:内存的1至1.5倍 / : 剩余硬盘大小 DB及存储:有大量重要的数据 /boot : 100M swap: 内存的1至1.5倍,如果内存大于等于1 ...

  5. socket编程中用到的头文件整理

    socket编程中需要用到的头文件 sys/types.h:数据类型定义 sys/socket.h:提供socket函数及数据结构 netinet/in.h:定义数据结构sockaddr_in arp ...

  6. vim emmet配置

    http://nerd-is.in/2013-12/learning-vim-again-1-install-vundle/ http://nerd-is.in/2013-12/learn-vim-a ...

  7. hive 中的Sort By、 Order By、Cluster By、Distribute By 区别

    Order by: order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间.在hive ...

  8. 用JAVA实现数字水印(可见)

    数字水印有可见不可见之分,可见的比如课件上印有学校校徽,微博发图片会水印上上传者的信息及微博logo等. 用java实现可见的数字水印,草人主要是用到了java.awt包中的AlphaComposit ...

  9. uva 1475 - Jungle Outpost

    半平面交,二分: 注意,题目的点是顺时针给出的: #include<cstdio> #include<algorithm> #include<cmath> #def ...

  10. 自己写loader

    http://www.cnblogs.com/lynxcat/archive/2013/03/08/2950373.html http://addyosmani.com/blog/building-a ...