题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018

题目大意:有n个点,m条边,人们希望走完所有的路,且每条道路只能走一遍。至少要将人们分成几组。

解题思路:先用并查集求出所有的连通块,然后判断每个连通块内点的度数,如果有奇数点则需要的组数ans+=奇数点/2;反之,所需组数ans+=1。注意:如果遇到孤立点即度数为0的点则不用算进去,因为没有跟他相连的边。

代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define CLR(arr,val) memset(arr,val,sizeof(arr))
using namespace std;
const int N=1e6+; int n,m;
int deg[N],root[N],num[N];//num[i]记录集合i内的奇数点个数 void init(){
CLR(deg,);
CLR(num,);
for(int i=;i<=n;i++)
root[i]=i;
} int find(int x){
return root[x]==x?x:root[x]=find(root[x]);
} int main(){
while(~scanf("%d%d",&n,&m)){
init();
for(int i=;i<=m;i++){
int u,v,x,y;
scanf("%d%d",&u,&v);
x=find(u);
y=find(v);
deg[u]++;
deg[v]++;
if(x!=y)
root[x]=y;
}
for(int i=;i<=n;i++){
if(deg[i]%==)
num[find(i)]++;
}
int ans=;
for(int i=;i<=n;i++){
if(deg[i]==)
continue;
if(find(i)==i){
if(num[i]==)
ans++;
else
ans+=num[i]/;
}
}
printf("%d\n",ans);
}
return ;
}

HDU 3018 Ant Trip (并查集求连通块数+欧拉回路)的更多相关文章

  1. C. Edgy Trees Codeforces Round #548 (Div. 2) 并查集求连通块

    C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  2. [欧拉回路] hdu 3018 Ant Trip

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3018 Ant Trip Time Limit: 2000/1000 MS (Java/Others) ...

  3. hdu 3018 Ant Trip 欧拉回路+并查集

    Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem ...

  4. HDU 3018 Ant Trip (欧拉回路)

    Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. HDU 3018 Ant Trip(欧拉回路,要几笔)

    Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  6. HDU 3018 Ant Trip

    九野的博客,转载请注明出处:  http://blog.csdn.net/acmmmm/article/details/10858065 题意:n个点m条边的无向图,求用几笔可以把所有边画完(画过的边 ...

  7. PAT L2-013 红色警报(并查集求连通子图)

    战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...

  8. hdu--1878--欧拉回路(并查集判断连通,欧拉回路模板题)

     题目链接 /* 模板题-------判断欧拉回路 欧拉路径,无向图 1判断是否为连通图, 2判断奇点的个数为0 */ #include <iostream> #include <c ...

  9. BZOJ 1015: [JSOI2008]星球大战starwar(并查集求连通块+离线处理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1015 题意: 思路:好题啊!!! 这道题目需要离线处理,先把所有要删的点给保存下来,然后逆序加点,这 ...

随机推荐

  1. wireshark 根据域名筛选

    应该去掉引号

  2. C++并发编程 等待与唤醒

    C++并发编程 等待与唤醒 条件变量 条件变量, 包括(std::condition_variable 和 std::condition_variable_any) 定义在 condition_var ...

  3. 杨辉三角之c实现任意行输出

    #include<stdio.h> #include<stdlib.h> int** fmalloc(int n){ int** array; //二维指针 int i; ar ...

  4. Codeforces 833B The Bakery dp线段树

    B. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...

  5. JS零碎小知识

    filter()方法对数组进行过滤,生成新数组 var aqiNewData = aqiData.filter(function(data){ return data[1]>60; }); // ...

  6. CSS中em,rem的区别

    首先这两个单位一般用在移动端 不太清楚得求证  再记录 1.em w3cschool中给出css中尺寸单位如下: 单位 描述 % 百分比 in 英寸 cm 厘米 mm 毫米 em 1em 等于当前的字 ...

  7. Spring整合JMS(四)——事务管理(转)

    *注:别人那复制来的 Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.Jm ...

  8. 解决CodeBlocks无法自动补全的问题

    在Deepin下安装的CB,输入printf.scanf的时候不会自动补全,这样就很难受. 解决办法是在Setting -> Editor -> Syntax highlighting - ...

  9. Python学习笔记(二十九)ThreadLocal

    import threading #创建全局ThreadLocal对象: local_school = threading.local() def process_student(): #获取当前线程 ...

  10. 关于拉格朗日乘子法与KKT条件

    关于拉格朗日乘子法与KKT条件 关于拉格朗日乘子法与KKT条件   目录 拉格朗日乘子法的数学基础 共轭函数 拉格朗日函数 拉格朗日对偶函数 目标函数最优值的下界 拉格朗日对偶函数与共轭函数的联系 拉 ...