题目:

某个国家有V(V≤1000)个城市,每两个城市之间都有一条双向道路直接相连,长度为T(每条边的长度都是T)。你的任务是找一条最短的道路(起点和终点任意),

使得该道路经过E条指定的边。输出这条道路的长度。

思路:

看完题目给出的两组数据,知道是一个欧拉路径的题目,然后考虑用并查集来统计连通分量的个数,然后答案就是这个个数减一+给出的边数E……

这题细思极恐,如果一个连通分量里边有多个奇点,那么这样只统计连通分量个数的做法就不对了。

这是一个无向连通图,那么对于每一个连通分量我们可以把它变成一个欧拉路径。再把所有的欧拉路径合成一个。

在合并的时候,每两个奇点可以用一条边来连接,除去最终留下的两个奇点,这样(奇点总数-2)/2-1+给出的边数就是答案。

对于是环的连通分量,可以默认他的奇点的个数是2.

如果给出的图只有一个点,那么答案一定是0.

代码:

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define MAX 1000000009
#define FRE() freopen("in.txt","r",stdin)
#define FRO() freopen("out.txt","w",stdout)
using namespace std;
typedef long long ll;
const int maxn = ;
vector<int> mp[maxn];
int V,T,E;
int vis[maxn]; int DFS(int u){ if(vis[u])
return ;
//cout<<"GG: "<<u<<endl;
vis[u] = ;
int cnt=;//奇点的个数
if(mp[u].size()%)
cnt++;
for(int i=; i<mp[u].size(); i++){
cnt += DFS(mp[u][i]);
}
return cnt;
} int main(){
//FRE();
int cs = ;
ios::sync_with_stdio(false);
while(cin>>V>>E>>T && V){
for(int i=; i<*V; i++){
mp[i].clear();
}
for(int i=; i<E; i++){
int st,en;
cin>>st>>en;
mp[st].push_back(en);
mp[en].push_back(st);
}
memset(vis,,sizeof(vis));
int ans=;
for(int i=; i<=V; i++){//统计图中一共有多少个奇点
if(!vis[i] && mp[i].size()){
ans += max(DFS(i),);
//cout<<ans<<endl;
}
}
ans = max(,(ans-)/)+E;//处理图中只有一个点的情况
cout<<"Case "<<++cs<<": "<<ans*T<<endl;
}
return ;
}

UVA12118 Inspector's Dilemma(欧拉路径)的更多相关文章

  1. UVA-12118 Inspector's Dilemma (欧拉回路)

    题目大意:一个有v个顶点的完全图,找一条经过m条指定边的最短路径. 题目分析:当每条边仅经过一次时,路径最短.给出的边可能构成若干棵树.在一棵树中,奇点个数总为偶数,若一棵树的奇点个数为0,则这棵树可 ...

  2. UVA 12118 Inspector's Dilemma(连通性,欧拉路径,构造)

    只和连通分量以及度数有关.不同连通分量只要连一条边就够了,连通分量为0的时候要特判.一个连通分量只需看度数为奇的点的数量,两个端点(度数为奇)是必要的. 如果多了,奇点数也一定是2的倍数(一条边增加两 ...

  3. 6-14 Inspector s Dilemma uva12118(欧拉道路)

    题意:给出一个国家城市个数n   所需走过道路个数e   每条道路长t   该国家任意两个城市之间都存在唯一道路长t     要求 :找一条最短的路遍历所有所需走过的路 一开始以为是图的匹配  但是好 ...

  4. Inspector's Dilemma(欧拉通路)

    In a country, there are a number of cities. Each pair of city is connected by a highway, bi-directio ...

  5. 【UVa】12118 Inspector's Dilemma(欧拉道路)

    题目 题目     分析 很巧秒的一道题目,对着绿书瞎yy一会. 联一下必须要走的几条边,然后会形成几个联通分量,统计里面度数为奇数的点,最后再减去2再除以2.这样不断相加的和加上e再乘以t就是答案, ...

  6. UVA - 12118 Inspector's Dilemma(检查员的难题)(欧拉回路)

    题意:有一个n个点的无向完全图,找一条最短路(起点终点任意),使得该道路经过E条指定的边. 分析: 1.因为要使走过的路最短,所以每个指定的边最好只走一遍,所以是欧拉道路. 2.若当前连通的道路不是欧 ...

  7. UVA12188-Inspector's Dilemma(欧拉回路+连通性判断)

    Problem UVA12188-Inspector's Dilemma Time Limit: 3000 mSec Problem Description In a country, there a ...

  8. 自定义Inspector检视面板

    Unity中的Inspector面板可以显示的属性包括以下两类:(1)C#以及Unity提供的基础类型:(2)自定义类型,并使用[System.Serializable]关键字序列化,比如: [Sys ...

  9. 企业IT管理员IE11升级指南【16】—— 使用Compat Inspector快速定位IE兼容性问题

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

随机推荐

  1. 500 OOPS: vsftpd: refusing to run with writable root inside chroot () 不能上传文件和文件夹

    500 OOPS: vsftpd: refusing to run with writable root inside chroot () 问题的是因为用户的根目录可写,并且使用了chroot限制,而 ...

  2. YTU 2898: C-Z型变换

    2898: C-Z型变换 时间限制: 1 Sec  内存限制: 128 MB 提交: 53  解决: 15 题目描述 让我们来玩个Z型变换的游戏,游戏的规则如下: 给你一个字符串,将它以Z字型的形状不 ...

  3. ubuntu将mysql、nginx添加到环境变量中

    vim /etc/profile 添加 export PATH="$PATH:/usr/local/mysql/bin" export PATH="$PATH:/usr/ ...

  4. PyCharm创建文件时自动添加头文件

    依次找到以下路径: File->settings->Editor->File and Code Templates->Python Script  #!/usr/bin/env ...

  5. Java游戏之碰撞检测

    在进行Java游戏开发时,我们经常会遇到碰撞检测的问题.如坦克大战中,炮弹与坦克相遇发生爆炸:守卫者游戏中,守卫者发射的箭与怪物相遇使怪物失血:打飞机游戏中,飞机发送的子弹与敌机相遇干掉敌机.这些都需 ...

  6. emma中文显示乱码问题解决

    在Linux中如果使用mysql的图形客户端,个人感觉Emma还不错.但是emma默认用apt-get 安装的话,emma是不支持中文的,这个需要自己修改一下了配置文件,或者直接修改emma程序源文件 ...

  7. 昆石VOS3000_2.1.2.0完整安装包及安装脚本

    安装包下载地址 http://www.51voip.org/post/57.html 安装教程: 上传安装包 ·给整个目录授权 chmod 777 /root/vosintsall 1.安装前准备 首 ...

  8. 2-6 ES6常用语法

  9. bzoj4890[Tjoi2017]城市(树的半径)

    4890: [Tjoi2017]城市 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 149  Solved: 91[Submit][Status][D ...

  10. (DP)51NOD 1049 最大子段和

    N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0.   例如:-2,11,-4,13,-5 ...