「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd
题目描述
原题来自:CEOI 1999
给定一张无向图,求图中一个至少包含 333 个点的环,环上的节点不重复,并且环上的边的长度之和最小。该问题称为无向图的最小环问题。在本题中,你需要输出最小环的方案,若最小环不唯一,输出任意一个均可。若无解,输出 No solution.
。图的节点数不超过 100100100。
输入格式
第一行两个正整数 n,mn,mn,m 表示点数和边数。
接下来 mmm 行,每行三个正整数 x,y,zx,y,zx,y,z,表示节点 x,yx,yx,y 之间有一条长度为 zzz 的边。
输出格式
输出一个最小环的方案:按环上顺序输出最小环上的点。若最小环不唯一,输出任意一个均可。若无解,输出 No solution.
样例
样例输入
5 7
1 4 1
1 3 300
3 1 10
1 2 16
2 3 100
2 5 15
5 3 20
样例输出
1 3 5 2
题解
无向图的最小环问题啊,不知道在多少场考试中间卡住了我的临门一脚。——hzz
教材:http://www.cnblogs.com/Yz81128/archive/2012/08/15/2640940.html#undefined
这个最小环中,一定会有一个编号最大的点。
那么我们设$dp[i][j][k]$为在只经过$1$~$k$的点时,$i$,$j$的最短距离。
那么如果我们设最小环中最大的点为$k$,它两边有点$i$,$j$,
那么答案的最小值就是$dp[i][j][k-1]+g[j][k]+g[k][i]$。
//
然后我们联想Floyd的过程,
$for$ $int$ $k=1$ $to$ $n$
$for$ $int$ $i=1$ $to$ $n$
$for$ $int$ $j=1$ $to$ $n$
也就是说,在$k$时,$i$,$j$的最小值都只中转了$1$~$k$的点。
这不就是我们要的$dp[i][j][k]$嘛?!
于是我们可以在Floyd的同时顺便维护答案。
并且$dp$数组的$k$那一维还是可以省掉的。
//详见代码吧qwq
编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
# #. 「一本通 3.2 例 」Sightseeing Trip Accepted ms KiB C++ / 1.2 K qwerta -- :: #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define LL long long
int g[][];//直接连边的距离
int dis[][];//有中转点的距离
int q[];
int toq=;
int zz[][];//zz[i][j]表示从i到j的最小路径的中转点
void getpath(int u,int v)
{
if(!zz[u][v])return;
getpath(u,zz[u][v]);//从u往中转点找
q[++toq]=zz[u][v];
getpath(zz[u][v],v);
return;
}
int main()
{
//freopen("a.in","r",stdin);
int n,m;
scanf("%d%d",&n,&m);
memset(g,,sizeof(g));
for(int i=;i<=n;++i)
g[i][i]=;
for(int i=;i<=m;++i)
{
int x,y,l;
scanf("%d%d%d",&x,&y,&l);
g[x][y]=min(g[x][y],l);
g[y][x]=g[x][y];
}
memcpy(dis,g,sizeof(g));
long long ans=1e9+;
for(int k=;k<=n;++k)
{
for(int i=;i<k;++i)
for(int j=i+;j<k;++j)//因为k为环内最大点,所以只能循环到k-1
{
if(1LL*dis[i][j]+g[j][k]+g[k][i]<ans)
{
ans=dis[i][j]+g[j][k]+g[k][i];
toq=;
q[++toq]=i;
getpath(i,j);
q[++toq]=j;
q[++toq]=k;
}
}
//然后是正常Floyd
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
{
if(1LL*dis[i][k]+dis[k][j]<dis[i][j])
{
dis[i][j]=dis[i][k]+dis[k][j];
zz[i][j]=k;
}
}
}
if(!toq){cout<<"No solution.";return ;}
for(int i=;i<=toq;++i)
cout<<q[i]<<" ";
return ;
}
「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd的更多相关文章
- 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie
题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1≤r1<l2≤r2≤N,x⨁yx\bigoplus yx⨁y 表示 ...
- LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果 ...
- LOJ #10131 「一本通 4.4 例 2」暗的连锁
LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...
- 「LOJ#10043」「一本通 2.2 例 1」剪花布条 (KMP
题目描述 原题来自:HDU 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据 ...
- 「一本通 1.3 例 5」weight]
「一本通 1.3 例 5」weight 题面 给定原数列 \(a_1,a_2,a_n\) ,给定每个数的前缀和以及后缀和,并且打乱顺序. 给出一个集合 \(S\) 要求从集合 \(S\) 中找到合适的 ...
- 「LOJ#10050」「一本通 2.3 例 2」The XOR Largest Pair (Trie
题目描述 在给定的 $N$ 个整数 $A_1,A_2,A_3...A_n$ 中选出两个进行异或运算,得到的结果最大是多少? 输入格式 第一行一个整数$N$. 第二行$N$个整数$A_i$. 输出格式 ...
- 「LOJ#10034」「一本通 2.1 例 2」图书管理 (map
题目描述 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. 该系统需 ...
- #10072. 「一本通 3.2 例 1」Sightseeing Trip(floyd求最小环+路径)
https://loj.ac/problem/10072 针对无向图 因为Floyd是按照结点的顺序更新最短路的,所以我们在更新最短路之前先找到一个连接点k,当前的点k肯定不存在于已存在的最短路f[i ...
- Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)
题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...
随机推荐
- spring学习六----------Bean的配置之Aware接口
© 版权声明:本文为博主原创文章,转载请注明出处 Aware Spring提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化后,可以获取相应的资源 通过Aware接口,可以对S ...
- POJ 2253 Frogger(最小最大距离)
题意 给你n个点的坐标 求第1个点到第2个点的全部路径中两点间最大距离的最小值 非常水的floyd咯 #include<cstdio> #include<cmath> #i ...
- Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect
Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect ...
- 贷前系统ElasticSearch实践总结
贷前系统负责从进件到放款前所有业务流程的实现,其中涉及一些数据量较大.条件多样且复杂的综合查询,引入ElasticSearch主要是为了提高查询效率,并希望基于ElasticSearch快速实现一个简 ...
- Azure、数据、AI开发工具
Azure.数据.AI开发工具 在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲 ...
- 如何在linux centos下安装git(转)
今天想开通github的服务,于是在服务器上安装git,百度到的结果千篇一律的全都有错误,给大家总结分享下. 如果yum install git可以直接安装的可以不通过源码编译安装. 源码安装步骤如下 ...
- CentOS搭建git服务器实测
Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议 1,安装: CentOS/Fedora: yum install git Ubuntu/Debian: ...
- 数据挖掘、目标检测中的cnn和cn---卷积网络和卷积神经网络
content 概述 文字识别系统LeNet-5 简化的LeNet-5系统 卷积神经网络的实现问题 深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功.本人在多年之前也曾接触过神经网络.本系 ...
- ASP.NET动态网站制作(9)-- JQ(1)
前言:从这节课开始讲jQuery的相关内容,这节课主要围绕jQuery的选择器展开. 内容: 1.jQuery是一个优秀的js框架,目前企业里大多数都是用jQuery(以下简称jq).jq是对js里一 ...
- 补充ajax分页的代码
1.主页代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...