UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)
题意:

分析:
欧拉通路:图连通;图中只有0个或2个度为奇数的结点
这题我们只需要判断选择的边构成多少个联通块, 再记录全部联通块一共有多少个奇度顶点。
然后我们在联通块中连线, 每次连接两个联通块就减少2个奇度顶点, 然后再数一下剩下的奇度顶点odd(肯定是剩下偶数个), 因为存在两个奇度顶点的图也是欧拉通路, 我们只需要在(odd - 2)个顶点中连线使其变为偶度顶点即可。
如果本身就没有奇度顶点就不需要除了。
所以答案就是 T * (E +(联通块 - 1) + (odd - 2)/ 2))
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
int V, E, T;
vector<int> G[maxn];
set<int> pick;
int deg[maxn];
bool vis[maxn];
void dfs(int u){
vis[u] = ;
for(int i = ; i < G[u].size(); i++){
if(!vis[G[u][i]]){
dfs(G[u][i]);
}
}
}
int main(){ int kase = ;
while(scanf("%d %d %d", &V, &E, &T) && V){ memset(deg,, sizeof(deg));
memset(vis, , sizeof(vis));
pick.clear(); for(int i = ; i < E; i++){
int u, v; scanf("%d %d", &u, &v);
deg[u]++, deg[v]++;
G[u].push_back(v);
G[v].push_back(u);
pick.insert(v);
pick.insert(u);
} int part = ;
int odd = , even = ;
for(auto it = pick.begin(); it != pick.end(); it++){
if(!vis[*it]){
dfs(*it);
part++;
}
if(deg[*it] % == ){
even++;
}
else odd++;
G[*it].clear();
}
odd -= (part - ) * ; int ans = E + part - ; if(odd > ){
ans += (odd -)/;
} if(E == ) ans = ;//特判一下没有边的情况
printf("Case %d: %d\n",kase++, ans * T); }
return ;
}
UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)的更多相关文章
- UVa 12118 检查员的难题(dfs+欧拉回路)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- ACM/ICPC 之 DFS求解欧拉通路路径(POJ2337)
判断是欧拉通路后,DFS简单剪枝求解字典序最小的欧拉通路路径 //Time:16Ms Memory:228K #include<iostream> #include<cstring& ...
- UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)
UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...
- CF Gym 100187J Deck Shuffling (dfs判连通)
题意:给你一堆牌,和一些洗牌机,可以改变牌的顺序,问你能不能通过洗牌机把数字为x的牌洗到第一个位置. 题解:反向建边,dfs判断连通性 #include<cstdio> #include& ...
- Uva 1103 古代象形符号(dfs求连通块, floodfill, 进制转换)
题意: 给定一个H行W列的字符矩阵(H<200, W < 50), 输入的是一个十六进制字符, 代表一行四个相邻的二进制, 1代表像素, 0代表没有像素. 然后要求判断输入的是以下哪些图形 ...
- UVA 572 Oil Deposits油田(DFS求连通块)
UVA 572 DFS(floodfill) 用DFS求连通块 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format: ...
- UVa 12118 nspector's Dilemma (构造+DFS+欧拉回路)
题意:给定n个点,e条边和每条边的长度t,每两个点之间都有路相连,让你求一条最短的路经过这e条边. 析:刚开始想到要判连通,然后把相应的几块加起来,但是,第二个样例就不过,后来一想,那么有欧拉回路的还 ...
- DFS入门之二---DFS求连通块
用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”. 我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次.比较典型的问题是”八连块问题“.即任意两格子所 ...
- 【dfs判负环】BZOJ1489: [HNOI2009]最小圈
Description 找出一个平均边权最小的圈. Solution 经典问题,二分答案判断有无负环. 但数据范围大,普通spfa会超时,于是用dfs判负环(快多了). 思路是dis设为0,枚举每个点 ...
随机推荐
- 手把手教你如何在Fire fox火狐浏览器里在线识别下载视频(超强大)(博主推荐)
网址是 Firefox about:addons
- SAE部署Python-让云端自动运行Python代码
之前写过模拟登录新浪微博的帖子,然而我并没有去爬过微博的数据,觉得有点浪费,于是就想写一个代码来发微博.写完之后觉得如果能自动发微博就好了,但是我又不可能24小时开始(晚上12点后还会断网),也没有v ...
- LBP特征
此篇摘取 <LBP特征原理及代码实现> <LBP特征 学习笔记> 另可参考实现: <LBP特征学习及实现> <LBP特征的实现及LBP+SVM分类> & ...
- (四)python自带解释器(IDLE)的使用
什么是IDE? Integrated Development Environment(集成开发环境) 打个不恰当的比方,如果说写代码是制作一件工艺品,那IDE就是机床.再打个不恰当的比方,PS就是图片 ...
- Qt样式表之三:实现按钮三态效果的三种方法
按钮的三态,指的是普通态.鼠标的悬停态.按下态.Qt中如果使用的是默认按钮,三态的效果是有的,鼠标放上去会变色,点击的时候有凹陷的效果. 但是如果自定义按钮实现三态效果有三种方法,一种是设置背景图,主 ...
- [SCOI2016]围棋
Description 近日,谷歌研发的围棋AI-AlphaGo以4:1的比分战胜了曾经的世界冠军李世石,这是人工智能领域的又一里程碑.与传统的搜索式AI不同,AlphaGo使用了最近十分流行的卷积神 ...
- _bzoj1191 [HNOI2006]超级英雄Hero【构图 并查集】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 以锦囊作为节点,问题作为边“一步一步”构图,当一个时刻,某个联通块中边数>点数, ...
- Jumping on Walls CodeForces - 198B
Jumping on Walls CodeForces - 198B 应该是一个隐式图的bfs,或者叫dp. 先是一个TLE的O(nklogn) #include<cstdio> #inc ...
- iOS常用第三方库 -转
转自 http://www.cnblogs.com/jukaiit/p/4956419.html 1.AFNetworking 轻量级的通讯类库,使用非常简单. 下载地址:https://github ...
- 远程访问rhel7的oracle中的问题
客户端得到的错误信息通常是:ORA-12170: TNS:连接超时 这时,我们基本可以肯定是服务器没有开放1521端口(假设你用默认设置) 解决方法: (1)假如你是在一个局域网环境,配置了防火墙.那 ...