HDU 3018 Ant Trip(欧拉回路一笔画问题)
2016-02-01 20:55
525 查看
题意:给一个无向图,N个顶点和M条边,问至少需要几笔才能把所有边画一遍
思路:只要知道一个结论就随便做了。
如果该连通分量是一个孤立的点,显然只需要0笔.
如果该连通分量是一个欧拉图或半欧拉图,只需要1笔.
非(半)欧拉图需要的笔数==该图中奇数度的点数目/2
对于每个以i为根的连通分量我们记录属于该连通分量的点数目num[i]和该连通分量中奇度点的个数odd[i],然后瞎搞就好了
题目
Description
Ant Country consist of N towns.There are M roads connecting the towns.
Ant Tony,together with his friends,wants to go through every part of the country.
They intend to visit every road , and every road must be visited for exact one time.However,it may be a mission impossible for only one group of people.So they are trying to divide all the people into several groups,and each may start at different town.Now
tony wants to know what is the least groups of ants that needs to form to achieve their goal.
Input
Input contains multiple cases.Test cases are separated by several blank lines. Each test case starts with two integer N(1<=N<=100000),M(0<=M<=200000),indicating that there are N towns and M roads in Ant Country.Followed by M lines,each
line contains two integers a,b,(1<=a,b<=N) indicating that there is a road connecting town a and town b.No two roads will be the same,and there is no road connecting the same town.
Output
For each test case ,output the least groups that needs to form to achieve their goal.
Sample Input
Sample Output
Hint
思路:只要知道一个结论就随便做了。
如果该连通分量是一个孤立的点,显然只需要0笔.
如果该连通分量是一个欧拉图或半欧拉图,只需要1笔.
非(半)欧拉图需要的笔数==该图中奇数度的点数目/2
对于每个以i为根的连通分量我们记录属于该连通分量的点数目num[i]和该连通分量中奇度点的个数odd[i],然后瞎搞就好了
#include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib> #include <algorithm> #include <vector> #include <map> #include <string> #include <set> #include <ctime> #include <cmath> #include <cctype> using namespace std; #define maxn 100000+100 #define LL long long int cas=1,T; int pre[maxn]; int Find(int x) { return pre[x]==-1?x:pre[x]=Find(pre[x]); } int n,m; int num[maxn]; int odd[maxn]; int degree[maxn]; int main() { while (scanf("%d%d",&n,&m)!=EOF) { memset(pre,-1,sizeof(pre)); memset(num,0,sizeof(num)); memset(odd,0,sizeof(odd)); memset(degree,0,sizeof(degree)); for (int i = 0;i<m;i++) { int u,v; scanf("%d%d",&u,&v); degree[u]++; degree[v]++; u = Find(u); v = Find(v); if (u!=v) pre[u]=v; } for (int i = 1;i<=n;i++) { num[Find(i)]++; if (degree[i]%2) odd[Find(i)]++; } int ans = 0; for (int i = 1;i<=n;i++) { if (num[i]<=1) continue; else if (odd[i]==0) ans++; else if (odd[i]>0) ans+=odd[i]/2; } printf("%d\n",ans); } //freopen("in","r",stdin); //scanf("%d",&T); //printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC); return 0; }
题目
Description
Ant Country consist of N towns.There are M roads connecting the towns.
Ant Tony,together with his friends,wants to go through every part of the country.
They intend to visit every road , and every road must be visited for exact one time.However,it may be a mission impossible for only one group of people.So they are trying to divide all the people into several groups,and each may start at different town.Now
tony wants to know what is the least groups of ants that needs to form to achieve their goal.
Input
Input contains multiple cases.Test cases are separated by several blank lines. Each test case starts with two integer N(1<=N<=100000),M(0<=M<=200000),indicating that there are N towns and M roads in Ant Country.Followed by M lines,each
line contains two integers a,b,(1<=a,b<=N) indicating that there is a road connecting town a and town b.No two roads will be the same,and there is no road connecting the same town.
Output
For each test case ,output the least groups that needs to form to achieve their goal.
Sample Input
3 3 1 2 2 3 1 3 4 2 1 2 3 4
Sample Output
1 2
Hint
New ~~~ Notice: if there are no road connecting one town ,tony may forget about the town. In sample 1,tony and his friends just form one group,they can start at either town 1,2,or 3. In sample 2,tony and his friends must form two group.
相关文章推荐
- Qt学习之路(49): 通用算法
- 面向对象程序设计第二次作业之视频作业
- 重复记录的sql相关操作
- Qt核心剖析: moc
- 你会对老板说这十句傻话吗
- python操作MySQL数据库
- 从头认识Spring-1.12 注入Map
- Qt学习之路(58): 进程间交互(QProcess.readAllStandardOutput可以读取控制台的输出)
- hibernate 问题系列 01
- 01背包模板(2602)
- 视频课程1.0
- ZOJ 1414:Number Steps
- Spark PairRDD 转化一
- Jquery学习笔记:操作form表单元素之一(文本框和下拉框)
- 关于void GetMemory(*p)与void* GetMemory()的讨论
- ajax在js下按顺序执行
- Python格式化输出
- SQL Server 2008, 2008 R2, 2012 and 2014 完全支持TLS1.2加密传输
- Qt学习之路(60): 创建shared library
- 算法学习笔记(八) 动态规划的一般求解方法