poj3018(欧拉路)
来源:互联网 发布:网络看电视软件 编辑:程序博客网 时间:2024/06/16 13:54
题意:
给出一张图;要求走过的边不能再走;
需要分几个队伍才能访问完,就是要画几笔;
思路:
算每个联通分量的奇点个数;
每两个奇点,就需要一队人访问;
所以每一个联通分量需要 奇点个数 / 2 的队伍;
如果这个联通分量奇点个数为0,也需要一队;
给出一张图;要求走过的边不能再走;
需要分几个队伍才能访问完,就是要画几笔;
思路:
算每个联通分量的奇点个数;
每两个奇点,就需要一队人访问;
所以每一个联通分量需要 奇点个数 / 2 的队伍;
如果这个联通分量奇点个数为0,也需要一队;
还有一个就是,如果是孤立点,就不需要,因为我们要访问所有的边,孤立点没有边.
#include <cstdio>#include <cstring>#include <vector>using namespace std;const int N = 100000 + 5;vector<int> p[N];int vis[N];int n, m, num, q, u, v;int ans;void dfs(int cur) {vis[cur] = 1;if(p[cur].size() % 2)q++;for(int i = 0; i < p[cur].size(); i++) {if(!vis[p[cur][i]]) {dfs(p[cur][i]);}}}int main() {while (scanf("%d%d", &n, &m) == 2) {ans = 0;memset(vis, 0, sizeof(vis));for(int i = 0; i <= n; i++)p[i].clear();for(int i = 0; i < m; i++) {scanf("%d%d", &u, &v);p[u].push_back(v);p[v].push_back(u);}for(int i = 1; i <= n; i++) {if(!vis[i]) {if(p[i].size() == 0)continue;q = 0;dfs(i);if(q == 0)ans++;elseans += q / 2;}}printf("%d\n",ans);}}
0 0
- poj3018(欧拉路)
- 欧拉路
- 欧拉路
- 欧拉路
- usaco 欧拉路
- 欧拉路问题
- 寻找欧拉路
- 【图论】欧拉路
- SDNU__1088.欧拉路
- 欧拉路的应用--文字游戏
- 【TOJ】1416. Catenyms --欧拉路
- 欧拉回路,欧拉路
- 欧拉路和欧拉图
- 欧拉图与欧拉路
- 图论 欧拉路代码模版
- poj 1637 混合欧拉路
- POJ 1386(欧拉路)
- SGU101 - Domino(欧拉路)
- 美式民主
- c语言学习笔记
- OCP053(400-600)
- 使用IIS承载WCF服务
- 一起talk C栗子吧(第二十三回:C语言实例--队列二)
- poj3018(欧拉路)
- MATLAB 练习06 符号计算
- 堆串的基本运算
- Spring IOC源码详解之容器初始化
- 八皇后问题
- Android源码编译apk导入第三方包报错
- 继承与派生
- Mysqli:预编译 mysqli_stmt
- 递归算法