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. Newtonsoft.Json.dll解析json的dll文件使用

    要解析的json //解析前 //解析前 {,,,,,,,,,,},,,,,,,,,,,},,,,,,,,,,,,,,,,},,,,,,,,,},,,,,,,,,,,,},,,,,,,,,,,},,, ...

  2. 3d旋转--transform-style: preserve-3d,translate3d(x,y,z),perspective()

    transform-style: preserve-3d,translate3d(x,y,z),perspective() 让其倾斜的核心:加perspective(600px)让其动的核心:rans ...

  3. thinkphp验证码的实现

    两种验证码验证实现,一种直接在form表单提交按钮实现验证,一种使用ajax传递参数实现验证: 1.直接在form表单提交按钮实现验证,在控制器VerifyController.class.php中写 ...

  4. 用php生成word文档

    一.用windows里面自带的com,然后用php生成word文档 <?php $word= new COM("word.application") or die(" ...

  5. 原创:Javascript循环队列类

    需要滚动显示最多一定数量的信息,于弄了个这个 var LeesCircleQueue=function(size) { // 队列数组 var _queue=[]; // 队首索引 var _fron ...

  6. Python用format格式化字符串

    format是是python2.6新增的一个格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型 2.单个参数可以多次输出,参数顺 ...

  7. sbrk and coreleft

    一.sbrk 函数来源:TC2.0.Linux 函数名: sbrk 功 能: 增加程序可用数据段空间,增加大小由参数 incr决定 . 返回值:函数调用成功返回一指针,指向新的内存空间.函数调用失败则 ...

  8. VSCode调试go

    VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%   1.问题描述 由于安装VS15 Preview ...

  9. php分页类的二种调用方法(转载)

    php分页类的二种调用方法 原文地址:http://www.xfcodes.com/php/fenye/25584.htm 导读:php分页类的二种调用用法,ajax调用php分页类,非ajax方式调 ...

  10. 实现strlen,strcpy,strcat,strcmp同功能的函数stringLength,stringCopy,stringCatch,stringCompare

    #import <Foundation/Foundation.h> /* 求字符串长度 */ int stringLength(char arr[]); /* 复制字符串 将arr1 复制 ...