UVa 12118 检查员的难题(dfs+欧拉回路)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3270
2017年的第一题。
题意:给出必须要经过的边,找一条经过所有边的最短道路。
一开始一点想法都没有,后来网上看了下才明白是要用dfs和欧拉回路来做的。
欧拉回路是这样说的:如果一个无向图是连通的,且最多只有两个奇点,则一定存在欧拉道路。如果有两个奇点,则必须从其中一个奇点出发,另一个奇点终止;如果奇点不存在,则可以从任意点出发,最终一定会回到该点。
对于这道题,用dfs可以求出连通块来,由于是要形成欧拉道路就可以了,所以可以存在两个奇点,但是如果超过了两个奇点,那么每个奇点就得多加一条边使之成为偶数点,最终只剩下两个奇点,那么就可以形成欧拉道路了。
这道题我错了好久,在输入的时候我是这么写的while (cin >> v >> e >> t && v && e && t ),但其实只要while (cin >> v >> e >> t && v )就可以了。
通过这道题,终于好好的了解了下欧拉回路。
#include<iostream>
#include<string>
#include<cstring>
using namespace std; const int maxn = ; int G[maxn][maxn];
int v;
int degree[maxn];
int ans; void dfs(int u)
{
for (int i = ; i <= v; i++)
{
if (G[u][i])
{
degree[u]++; //统计每个结点的度数
degree[i]++;
G[u][i] = G[i][u] = ;
ans++;
dfs(i);
}
}
} int main()
{
int e, t;
int x, y;
int kase = ;
while (cin >> v >> e >> t && v )
{
memset(G, , sizeof(G));
for (int i = ; i < e; i++)
{
cin >> x >> y;
G[x][y] = ;
G[y][x] = ;
}
int count = ;
ans = ;
for (int i = ; i <= v; i++)
{
for (int j = ; j <= v; j++)
{
if (G[i][j])
{
memset(degree, , sizeof(degree));
count++; //统计连通块
dfs(i);
int jidian = ; //计算出奇点的个数
for (int i = ; i <= v; i++)
{
if (degree[i] % == ) jidian++;
}
if (jidian > ) ans += (jidian - )/;
}
}
}
ans = ans + count;
if (ans) ans = ans - ;
cout<<"Case "<<++kase<<": "<<ans*t<<endl;
}
return ;
}
UVa 12118 检查员的难题(dfs+欧拉回路)的更多相关文章
- UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)
题意: 分析: 欧拉通路:图连通:图中只有0个或2个度为奇数的结点 这题我们只需要判断选择的边构成多少个联通块, 再记录全部联通块一共有多少个奇度顶点. 然后我们在联通块中连线, 每次连接两个联通块就 ...
- 紫书 例题 11-13 UVa 10735(混合图的欧拉回路)(最大流)
这道题写了两个多小时-- 首先讲一下怎么建模 我们的目的是让所有点的出度等于入度 那么我们可以把点分为两部分, 一部分出度大于入度, 一部分入度大于出度 那么显然, 按照书里的思路,将边方向后,就相当 ...
- UVA.297 Quadtrees (四分树 DFS)
UVA.297 Quadtrees (四分树 DFS) 题意分析 将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块.字符表示规则是: p表示这个像素块继续分解 ...
- UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)
UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...
- UVA - 12118 Inspector's Dilemma(检查员的难题)(欧拉回路)
题意:有一个n个点的无向完全图,找一条最短路(起点终点任意),使得该道路经过E条指定的边. 分析: 1.因为要使走过的路最短,所以每个指定的边最好只走一遍,所以是欧拉道路. 2.若当前连通的道路不是欧 ...
- UVa 12118 nspector's Dilemma (构造+DFS+欧拉回路)
题意:给定n个点,e条边和每条边的长度t,每两个点之间都有路相连,让你求一条最短的路经过这e条边. 析:刚开始想到要判连通,然后把相应的几块加起来,但是,第二个样例就不过,后来一想,那么有欧拉回路的还 ...
- uva 10054 The Necklace 拼项链 欧拉回路基础应用
昨天做了道水题,今天这题是比较水的应用. 给出n个项链的珠子,珠子的两端有两种颜色,项链上相邻的珠子要颜色匹配,判断能不能拼凑成一天项链. 是挺水的,但是一开始我把整个项链看成一个点,然后用dfs去找 ...
- UVA - 10129 Play on Words(欧拉回路+并查集)
2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...
- Uva 552 Prime Ring Problem(dfs)
题目链接:Uva 552 思路分析:时间限制为3s,数据较小,使用深度搜索查找所有的解. 代码如下: #include <iostream> #include <string.h&g ...
随机推荐
- MYSQL5.7无法启动服务原因及解决方案
mysql5.7安装完成后,想要把它发布成windows服务: 首先,应该配置新的配置文件,然后将cmd打开到安装目录的bin文件,键入: mysqld --default-file="D: ...
- linux环境下安装jdk
1.查看系统自带的jdk #RPM -qa|grep jdk 若存在则删除 jdk-1.7.0_67-fcs.x86_64 #rpm -e --nodeps jdk-1.7.0_67-fcs.x86_ ...
- 解决Inno Setup制作中文安装包在非中文系统上显示乱码的问题
尼玛,好几个月没更新了.囧... 目前我司新的客户端开发已经接近尾声,该改的bug已经改完,该重构的地方也都差不多了.视觉效果也已经根据美工的样式改完了.所以,就差制作安装包了.正所谓万事俱备,只欠东 ...
- web前端基础篇⑩
1.960栅格式布局法屏幕分辨率为1024*768.采用接 main宽为960px的布局方式12列式:每格60px 间距20px 3 6 3版 三格式布局(最常用)16列式:每格40px 间距20px ...
- web浏览器兼容简要整理
ajax的创建 if (window.XMLHttpRequest) { var xhr = new XMLHttpRequest(); } else { //IE6及其以下版本浏览器 var xhr ...
- 解决maven生成的web项目下的servlet.jar与tomcat自带servlet.jar冲突的问题
使用maven生成web工程后,编译需要下servlet-api.jar和jsp-api.jar文件. pom文件中的写法为: <dependency> <groupId>ja ...
- spring mvc 获取页面日期格式数据
1.传递日期参数: 解决办法: 实体类日期属性加 @DateTimeFormat(pattern="yyyy-MM-dd") 注解 beans中加 <mvc:annotati ...
- gnuplot安装的小问题
今天在学习NS2的过程中接触到了awk和gnuplot来分析延迟,丢包等情况. gnuplot是一款非常精巧的绘图工具,使用方法也很简单,功能却很强大. 安装还是通过终端: sudo apt-get ...
- SqlServer性能优化 性能调控(十)
如何做资源的调控: 1.建立资源池. 2.创建工作负荷组 create resource pool ImporPool with ( min_cpu_percent=30,max_cpu_percen ...
- 响应式图片srcset学习
响应式图片srcset全新释义sizes属性w描述符 先转再看