HDOJ 3018 - Ant Trip 判断一个无向图由由多少个欧拉(通/回)路构成..注意没有边的点不考虑..
来源:互联网 发布:网络正常app连不上网络 编辑:程序博客网 时间:2024/05/02 18:50
题意:
给一个无向图..问由最少可以分解成多少个欧拉(通/回)路
题解:
我是觉得首先要找出每一个联通块..在一个联通块中..两个奇数度的点可以构一条通路...虽然不知道怎么证明..感觉上在一个联通块上最少需要的一笔画为其max(1,其奇数度点数/2)...1是因为若此联通块没有奇数度点..也要画一条欧拉回路把该联通块所有边覆盖...
直觉还是挺正确的..也是多画了几个图观察出来的..但是有个trick...有些点是独立的..没有边..处理的时候注意.就无视这些点..而不要把这些点也看成联通块了...
Program:
#include<iostream>#include<stdio.h>#include<string.h>#include<cmath>#include<queue>#include<stack>#include<set>#include<time.h>#include<map>#include<algorithm>#define ll long long#define eps 1e-5#define oo 1000000007#define pi acos(-1.0)#define MAXN 100005#define MAXM 500005using namespace std; int d[MAXN],father[MAXN],F[MAXN],T[MAXN]; bool used[MAXN];int getfather(int x){ if (father[x]==x) return x; return father[x]=getfather(father[x]); }int main(){ int n,m,i,x,y,ans; while (~scanf("%d%d",&n,&m)) { memset(d,0,sizeof(d)); memset(used,false,sizeof(used)); for (i=1;i<=n;i++) father[i]=i; while (m--) { scanf("%d%d",&x,&y); d[x]++,d[y]++; used[x]=used[y]=true; father[getfather(x)]=getfather(y); } memset(F,0,sizeof(F)),m=0; for (i=1;i<=n;i++) if (used[i]) { if (!F[getfather(i)]) F[father[i]]=++m,T[m]=0; if (d[i]%2) T[F[father[i]]]++; } ans=0; for (i=1;i<=m;i++) ans+=max(1,T[i]/2); printf("%d\n",ans); } return 0;}
- HDOJ 3018 - Ant Trip 判断一个无向图由由多少个欧拉(通/回)路构成..注意没有边的点不考虑..
- 输入N个点的坐标,由程序判断该N个点是否能构成一个凸多边形。(VB)
- c++ 由本年第多少天判断几月几号,考虑闰年
- HDOJ 3018-Ant Trip
- 无向图转为由有根树模版、
- 由无向图建邻接矩阵
- 由M构成的直角三角形。
- 由*构成的空心三角
- 输出由*构成的菱形
- 输出由*构成的正三角形
- 由数字构成的菱形
- 猫扑强帖推荐:由一百个方案构成的一个方案
- 这是一个由代码构成的世界
- 由邻接矩阵画有向图、无向图
- 编码优化无极限——由一个相等判断想到的
- poj 2186 Popular Cows 【有向图求SCC +缩点】【求图中有多少个点 可以由其余所有点通过存在路径到达】
- 由MindManager命令构成的实用导图
- 不同的取法输出顺序可以不考虑。取字符( 从标准输入读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。取出的字符,要求按字母升序排列成一个串。)
- POJ 2362 正方形 和木棒类似 但是poj一直都报错 不知道它的测试用例是什么,一直没找到错误。
- This Handler class should be static or leaks might occur
- 建堆
- 一个奇葩的oracle分页问题,已经知道解决办法,但是不晓得产生问题的原音~
- 主要国家和地区货币代码表
- HDOJ 3018 - Ant Trip 判断一个无向图由由多少个欧拉(通/回)路构成..注意没有边的点不考虑..
- mysql-innodb-undo和redo
- A Generic Sparse BA
- Qt与Ice混合编程实现网络传输功能
- c++编程如何手动设定堆和栈的大小
- Dijkstra单源最短路径算法
- MySQL安全配置详解
- MFC 判断文本框输入的值是否为数字
- MARK