1.题意 2.分析难点(结合图形)

1.首先说说题意吧...题意很简单...但是一开始很菜的我就很迷惑..在想啊...题目怎么就会有没有连接边的点呢....因为你每次给出一条边..就把 a,b连接啦...所有...所有的城市最少都有一条边......(不知道有没有和我一样的人...)此处省略反省1W字........题目的城市是从1到N标记,比如有5个城市,两条街:1--2、3---4,那么 城市5就是不要考虑的.....

很明确...这就是求几笔画问题....很菜的我刚刚学习了欧拉回路....对于刚刚接触的我来说....不知道从哪里下手....于是...百度.....了解了一个联通图的:笔画次数=奇度顶点数/2;如果这个图没有奇度顶点,就可以一笔画.....

2.对于很菜的我来说难点就在于....如果N个城市,分成不同的“块”(就是不和别的连在一起、单独的一块城市),比如下图:

对于案例1分为了3个块,案例2分为了2个块,而且...对于案例1中的5号....我们要忽略,菜菜的我就会根据并査集判断一个图是否连通,然后对于连通的根据欧拉路的一些性质看看这个连通的图是不是欧拉路(之前发表过白话欧拉路径与欧拉回路),于是纠结了一下午...参考了一点点别人的代码....这里给出自己详细的理解、分析过程:

我们的目标是:(没蛀牙,小小玩笑)目标是求每个块中的 奇度点数/2,然后把所有块的这个奇度点数/2 加起来就是总共要几笔画;

1.我们有一个记录度的数组degree[MAX]..(不分入度和出度),案例输入之初赋值为0,案例每次输入a,b就degree[a]++,degree[b]++;那么我们可以知道,,从1到N,度为0的点,就是我们不要考虑的...那么

2.我们要考虑怎么分成不同的”块“,我们可以知道,对于每一个块...用并査集在输入的时候处理,那么,每一个块,就有一个祖先boss,我们就可以根据boss来分块,用一个flag[MAX],flag[i]表示以 i 为boss的这个块奇度点个数(因为我们要根据这个块来计算:笔画次数=奇度顶点数/2),因为我们在并査集操作过程中不确定会把谁作为祖先,那么数组大小开MAX,初始化为-1,然后我们从1到N每个点 i 找到祖先 x,如果flag[x]是-1,意思就是x第一次作为boss,并且在degree[i]不为0(为0就是要忽略的)的情况下吧flag[x]=0,然后我们在判断:如果degree[i]%2是不是0(奇度判断),决定flag[x]是不是要++一次(如果是奇度点,以x为boss的块中就多了一个奇度点);

3.最后再从1到N计算一次笔画就可以啦...

上马:

// 46MS 1400K
#include<stdio.h>
#include<string.h> #define MAX 100005 int N,M;
int father[MAX];
int degree[MAX];
int flag[MAX]; int find(int a)
{
if(a!=father[a])
father[a]=find(father[a]);
return father[a];
} void init()
{
int i;
for(i=1;i<=N;i++) father[i]=i//,degree[i]=0,flag[i]=-1;
memset(degree,0,sizeof(degree));memset(flag,-1,sizeof(flag));//事实证明memset比for从1到N初始快 int a,b;
for(i=0;i<M;i++)
{
scanf("%d%d",&a,&b);
degree[a]++;degree[b]++;
father[find(a)]=find(b);//合并
}
} void work()
{
int i;
for(i=1;i<=N;i++)
{
int x=find(i);
if(flag[x] == -1 && degree[i]!=0)
flag[x]=0;
if(degree[i]%2 != 0)
flag[x]++;
}
int ans=0;
for(i=1;i<=N;i++)
if(flag[i]!=-1)
{
if(flag[i]==0) ans++;//|| flag[i]%2==0
else ans+=flag[i]/2;
}
printf("%d\n",ans);
} int main()
{
while(~scanf("%d%d",&N,&M))
{
init();
work();
}
return 0;
}
/*
5 3
1 2
1 3
1 4
*/

个人愚昧观点..欢迎指正,欢迎讨论...

[置顶] hdu3018解题报告--也是白话几笔画学习总结的更多相关文章

  1. [置顶] 白话最小边覆盖总结--附加 hdu1151结题报告

    刚开始看到这个题目的时候就觉得想法很明了,就是不知道如何去匹配... 去网上看了不少人的解题报告,但是对于刚接触“最小边覆盖”的我来说....还是很困难滴....于是自己又开始一如以往学习“最大独立集 ...

  2. [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总

    本文出自   http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner  打开 这个专题一共有25题,刷完 ...

  3. 2021字节跳动校招秋招算法面试真题解题报告--leetcode206 反转链表,内含7种语言答案

    206.反转链表 1.题目描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1-> ...

  4. Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告

    Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...

  5. 北邮新生排位赛1解题报告d-e

    话说cdsn要是前面插入源代码又什么都不放就会出现奇怪的源代码?不知道是哪个网页的 407. BLOCKS 时间限制 1000 ms 内存限制 65536 KB 题目描述 给定一个N∗M的矩阵,求问里 ...

  6. POJ 1001 解题报告 高精度大整数乘法模版

    题目是POJ1001 Exponentiation  虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于 ...

  7. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  8. LeetCode解题报告—— Reverse Nodes in k-Group && Sudoku Solver

    1. Reverse Nodes in k-Group Given a linked list, reverse the nodes of a linked list k at a time and ...

  9. USACO Section1.3 Combination Lock 解题报告

    combo解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

随机推荐

  1. 您应该了解的 Windows Azure 网站在线工具

     编辑人员注释:本文章由Windows Azure 网站团队的软件开发者 Amit Apple 撰写. 如果想要了解并亲身参与计算资源管理,那么您一定会很高兴得知这一消息:Windows Azur ...

  2. dojo 学习笔记

    1  因为Dijit包括了一系列的UI组件,他绑定了4个支持的主题:nihilo, soria, tundra 和claro.每个主题包括了一系列的图片和CSS文件来控制组件的外观.CSS文件必须显示 ...

  3. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

    [LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...

  4. Java中volatile的作用以及用法

    volatile让变量每次在使用的时候,都从主存中取.而不是从各个线程的“工作内存”. volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正 ...

  5. iOS键盘遮挡问题解决办法

    iOS开发之“键盘遮挡输入框的解决办法”之一 -----键盘通知之前处理这种问题,总是在触发输入框编辑事件键盘弹出的时候,将当前的View整体向上移动,结束编辑又整体向下移,耗时耗力效率低. 在网上看 ...

  6. spring注解controller示例

    依赖库 spring 3.0 配置web.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <w ...

  7. asp.net个人笔记

    1.进程外session一记 配置进程外session, 在webconfig中配置<sessionState timeout="60" mode="StateSe ...

  8. (译)Node.js的全局变量

    原文标题:Global Variables in Node.js 原文链接:http://www.hacksparrow.com/global-variables-in-node-js.html 你可 ...

  9. CSS3属性之border-radius

    一.语法: 代码如下: border-radius : none |  <length>{1,4} [/  <length>{1,4} ]? 二.取值: <length& ...

  10. ACE6.2.0文件/目录操作

    文件读取.#include "ace/FILE_Connector.h"#include "ace/FILE_IO.h"void fileRW(){ACE_FI ...