Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

刷完牙洗完脸,黄黄同学就要上课去了。可是黄黄同学每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍。我们一般人很可能对一些地图是办不到每条路走一遍且仅走一遍的,但是黄黄同学有个传送机,他可以任意地将一个、人从一个路口传送到任意一个路口。 可是,每传送一次是需要耗费巨大的内力的,黄黄同学希望可以用最少的传送次数完成游遍校园,你能帮助他吗? 因为黄黄同学只是游历校园,于是我们可以认为黄黄同学可以从任意点开始,到任意点结束。

【输入格式】

输入文件sent.in的第一行有一个整数N,表示黄黄的校园里一共有多少路口。 第二行有一个整数M,表示路口之间有M条路。 后面M行每行两个整数a、b表示a与b之间有一条路,且路是双向的。

【输出格式】

输出文件sent.out只包括一个整数s,表示黄黄同学最少的传送次数。

【数据规模】

对于100%的数据,保证N≤100000,K≤500000,1≤a,b≤N。

Sample Input1

3

2

1 2

2 3

Sample Output1

0

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u224

【题解】



对于一个联通图来说;

只有当它的奇点(度数为奇数的点)的个数为2或0的时候,才能完成一笔画;

如果奇点的个数>2,则需要x/2笔画;

(本题中需要传送机为(x-2)/2)

x为奇点的个数;

(在一个连通图中,奇点的个数总是偶数的);

如果一张图里面有不同的连通块;

那么不同的连通块之间还要一个传送器;

(连通块用dfs求感觉比并查集方便)

题目说的是走遍所有的路;

所以如果一个连通块中只有一个点,那么就不必加上传送机;



【完整代码】

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int MAXN = 1e5+100; int n,m,tj,ji[MAXN],siz[MAXN],cnt,num=0;
vector <int> g[MAXN];
bool bo[MAXN]; void dfs(int x)
{
cnt++;
bo[x] = true;
int len = g[x].size();
if (len&1)tj++;
rep1(i,0,len-1)
{
int y = g[x][i];
if (!bo[y])
dfs(y);
}
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);rei(m);
rep1(i,1,m)
{
int x,y;
rei(x);rei(y);
g[x].pb(y);
g[y].pb(x);
}
rep1(i,1,n)
if (!bo[i])
{
tj = 0;cnt = 0;
dfs(i);
siz[++num] = cnt;
ji[num] = tj;
}
memset(bo,false,sizeof bo);
int ans = 0,tt = 0;
rep1(i,1,num)
{
if (ji[i]>2)
ans+=(ji[i]-2)/2;
if (siz[i]>1)
tt++;
}
ans+=tt-1;
printf("%d\n",ans);
return 0;
}

【u224】传送机的更多相关文章

  1. 「2018-11-05模拟赛」T5 传送机 解题报告

    5.传送机(sent.*) 问题描述: 黄黄同学要到清华大学上学去了.黄黄同学很喜欢清华大学的校园,每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍. 我们一般人很可能对 ...

  2. hdu 2102

    简单的3维BFS 大写的YES和NO,这心粗的....唉 #include<iostream> #include<cstdio> #include<queue> u ...

  3. 【HDOJ】2102 A计划

    BFS,不过有很多地方需要注意,比如传送机传送到另一个传送机.还有要注意格式. #include <iostream> #include <cstdio> #include & ...

  4. Java消息服务

    什么是消息? 消息是可编程实现两端通信的机制.通常的一些消息技术如:TCP/IP Sockets.管道.文件.共享存储. Java消息服务 Java消息服务,即Java Message Service ...

  5. bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫

    Description 今年秋天,约翰带着奶牛们去玩玉米迷宫.迷宫可分成NxM个格子,有些格子种了玉 米,种宥玉米的格子无法通行.  迷宫的四条边界上都是种了玉米的格子,其屮只有一个格子 没种,那就是 ...

  6. LA 5966 Blade and Sword (双向bfs + 想法) - from lanshui_Yang

    题目大意:给你一张有n * m个网格的图,每个网格可能是如下符号: “#”:墙 “P”:出发点 “D”:终点 “.”:空地 “*”:传送机 有一个旅行家(假设名叫Mike),他要从点P到达点D,途中必 ...

  7. hdu 2102 A计划(双层BFS)(具体解释)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php ...

  8. hdu2102(bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 分析:bfs求最短时间到达'P'点,不过本题有好几个trick,我都踩到了,自己还是太嫩了... ...

  9. HDU 2102 A计划(DFS)

    题目链接 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主 ...

随机推荐

  1. PYTHON网络爬虫与信息提取[scrapy框架应用](单元十、十一)

    scrapy 常用命令 startproject  创建一个新的工程 scrapy startproject <name>[dir] genspider    创建一个爬虫         ...

  2. ConcurrentModificationException解决办法

    package test.my.chap0302; import java.util.ArrayList; import java.util.Iterator; import java.util.Li ...

  3. php_imagick是怎么实现复古效果的呢?

    php_imagick程序示例 1.创建一个缩略图并显示出来 <?phpheader('Content-type: image/jpeg');$image = new Imagick('imag ...

  4. MySQL用户管理+MySQL权限管理

    我们现在默认使用的都是root用户,超级管理员,拥有全部的权限! 但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的数据库! 所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限 ...

  5. 各种高度的区别及height、clientHeight、scrollHeight、offsetHeight的区分

    1.height.clientHeight.scrollHeight.offsetHeight 我们来实现test中的onclick事件    function justAtest()    {    ...

  6. TensorFlow3学习笔记1

    1.简单实例:向量相加 下面我们通过两个向量相加的简单例子来看一下Tensorflow的基本用法. [1. 1. 1. 1.] + [2. 2. 2. 2.] = [3. 3. 3. 3.] impo ...

  7. vagrant 安装 ubuntu

    安装版本: ubuntu  trusty64(14.04) step1: 安装vagrant,vbox step2: 下载box文件(官网http://www.vagrantbox.es/) http ...

  8. 2019-3-27-win10-uwp-动画移动滑动条的滑块

    title author date CreateTime categories win10 uwp 动画移动滑动条的滑块 lindexi 2019-03-27 10:51:32 +0800 2019- ...

  9. 【NS2】添加mUDP、mUdpSink和mTcpSink模块

    根据柯老师的教材可知,mUDP是UDP的延伸,除了具有UDP的功能外,还能记录所发送的包的信息.mUdpSink可以把接收到的包的信息记录 到文件中.mTcpSink是TCPsink的延伸,除了具有T ...

  10. Linux的 crontab定时任务小记

    编辑任务 crontab -e 查看任务 crontab -l 任务配置基本格式:*   * * * * command分(0-59) 时(0-23) 天(1-31) 月(1-12) 周(0-6,0代 ...