「2018-11-05模拟赛」T5 传送机 解题报告
5、传送机(sent.*)
问题描述:
黄黄同学要到清华大学上学去了。黄黄同学很喜欢清华大学的校园,每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍。
我们一般人很可能对一些地图是办不到每条路走一遍且仅走一遍的,但是黄黄同学有个传送机,他可以任意地将一个人从一个路口传送到任意一个路口。
可是,每传送一次是需要耗费巨大的内力的,黄黄同学希望可以用最少的传送次数完成游遍校园,你帮助他吗?因为黄黄同学只是游历校园,于是我们可以认为黄黄同学可以从任意点开始,到任意点结束。
注意:不必经过所有的点。输入格式:输入第一行一个整数N,表示黄黄的校园里一共有多少路口。第二行一个整数M,表示路口之间有M条路。后面M行,每行两个整数a、b,表示a与b之间有一条路,且路是双向的。输出格式:输出一行一个整数S,表示黄黄同学最少的传送次数。
输入样例:
3
2
1 2
2 3
输出样例:
0
数据规模:
对于100%的数据满足:N<=100000,M<=500000,1<=a,b<=N。
知识储备:
奇点:度数为奇数的点 //度数是什么就不解释了
当一个连通图的奇点个数为0或2时,该连通图可以从某个点出发,经过每条边一次(仅一次)//自己概括,可能有所疏忽,请大家指出错误之处!
一句话概括,就是添加最少的边,使它构成一个欧拉回路,也就是广为人知的一笔画问题。
这样理解,你就死了因为根据之前我的题解,会导致细节贼多,超难理解,所以我换了种思路
可以这样考虑:不要看总体,考虑每个连通块分别构成欧拉回路,也就是对于每个连通块,连上 max((奇点个数 - 2) / 2,0)条边
再将所有连通块的起点和终点顺次相连,这样就可以保证整个图构成欧拉回路了
不难理解吧(由于目前时间紧迫,有时间再添加具体细节)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100005
int N, M;
int fa[MAXN];
int s[MAXN], a[MAXN];
int find( int x ){
if ( x == fa[x] ) return x;
return fa[x] = find( fa[x] );
}
void Merge( int x, int y ){
x = find(x); y = find(y);
if ( x != y ) fa[x] = y;
}
int main(){
scanf( "%d%d", &N, &M );
if ( M == 0 ){ printf( "0\n" ); return 0; }
for ( int i = 1; i <= N; ++i ) fa[i] = i;
for ( int i = 1; i <= M; ++i ){
int x, y; scanf( "%d%d", &x, &y );
s[x]++; s[y]++;
Merge( x, y );
}
for ( int i = 1; i <= N; ++i ) a[find(i)] += s[i] % 2;
int ans(0);
for ( int i = 1; i <= N; ++i )
if ( s[i] > 0 && find(i) == i ) ans = ans + 1 + max( 0, ( a[i] - 2 ) / 2 );
printf( "%d\n", ans - 1 );
return 0;
}
完结撒花
「2018-11-05模拟赛」T5 传送机 解题报告的更多相关文章
- 「2018-12-02模拟赛」T3 约束排列 解题报告
3.约束排列(place.pas/cpp/in/out) 问题描述: 给出 n 个互不相同的小写字母,表示出现的字符类型,以及 k 个约束关系: .....,表示 ai 必须出现在 bi 前面(ai, ...
- 「2018-12-02模拟赛」T1 最短路 解题报告
1.最短路(short.pas/cpp/in/out) 问题描述: 小 C 终于被小 X 感动了,于是决定与他看电影,然而小 X 距离电影院非常远,现在假设 每条道路需要花费小 X 的时间为 1,由于 ...
- Solution -「牛客 NOIP 模拟赛」打拳
\(\mathcal{Description}\) 现 \(2^n\) 个人进行淘汰赛,他们的战力为 \(1\sim 2^n\),战力强者能战胜战力弱者,但是战力在集合 \(\{a_m\}\) 里 ...
- [NOI.AC 2018NOIP模拟赛 第三场 ] 染色 解题报告 (DP)
题目链接:http://noi.ac/contest/12/problem/37 题目: 小W收到了一张纸带,纸带上有 n个位置.现在他想把这个纸带染色,他一共有 m 种颜色,每个位置都可以染任意颜色 ...
- 「CSP-S模拟赛」2019第四场
「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...
- #10471. 「2020-10-02 提高模拟赛」灌溉 (water)
题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...
- #10470. 「2020-10-02 提高模拟赛」流水线 (line)
题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...
- 9.11 myl模拟赛
9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...
- 「NOIP模拟赛」数位和乘积(dp,高精)
统计方案数,要么组合数,要么递推(dp)了. 这是有模拟赛历史以来爆炸最狠的一次 T1写了正解,也想到开long long,但是开错了地方然后数组开大了结果100->0 T3看错题本来简单模拟又 ...
随机推荐
- Android的headerView和emptyView共存问题
今天做项目的时候,准备优化下ListView相关的东西,于是乎,需要做一个当列表无数据时,空的提醒页面.这个自然想到的是ListView的setEmptyView()方法,于是顺手就写了,可是,当我为 ...
- H3C 路由器单播IP包转发
- ArrayList存储基本类型时的封装类
- H3C 轮询DCC和共享DCC
- 如何学习Python的一些总结
https://mp.weixin.qq.com/s/w0NoDiYfvtTy8N3BVoIVpw 为什么选择Python 经常会有同学问我为什么选择Python.我很喜欢这门语言,因为它的简洁灵活, ...
- [转]Netty实现原理浅析
Netty是JBoss出品的高效的Java NIO开发框架,关于其使用,可参考我的另一篇文章netty使用初步.本文将主要分析Netty实现方面的东西,由于精力有限,本人并没有对其源码做了极细致的研 ...
- Linux 使用 Speedtest 测试网速
Speedtest的linux客户端是用python写的一个安装包 安装python包管理器pip yum -y install python-pip 如果提示No package python-pi ...
- window10+python3.7安装tensorflow--gpu tensorflow 安装
能安装GPU的前提是:1.显卡支持CUDA (1)右击我的电脑–属性 (2)打开设备管理器 (3)显示适配器 我的电脑是支持CUDA的 2.pip 版本 >= 8.1查看pip版本 :pip ...
- vue 打包后,页面空白及图片路径的问题
打包之后打开dist的页面显示空白: 1.记得改一下config下面的index.js中bulid模块导出的路径. 这里需要将 assetsPublicPath: '/'改为assetsPublicP ...
- H3C RIP路由表的更新