【POJ1734】Sightseeing Trip 无向图最小环
题目大意:给定一个 N 个顶点的无向图,边有边权,如果存在,求出该无向图的最小环,即:边权和最小的环,并输出路径。
题解:由于无向图,且节点数较少,考虑 Floyd 算法,在最外层刚开始遍历到第 K 号节点时,\(d[i][j]\) 中记录着经过前 k-1 个点,从 i 到 j 的最短距离。因此,可以依次考虑每一个结构:\(\{d[i][j]+G[i][k]+G[k][j] \}\),这便是一个环形结构,每次更新答案贡献即可。
至于路径输出,\(get\_path(int\ i,int\ j)\) 函数意为获得从节点 i 到节点 j 的中间节点,不包括端点是因为每次递归时会造成重复记录,因此需要手动额外记录端点。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=110;
const int inf=0x3f3f3f3f;
inline int read(){
int x=0,f=1;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
return f*x;
}
int n,m,ans=inf,G[maxn][maxn],d[maxn][maxn],mid[maxn][maxn];
vector<int> p;
void read_and_parse(){
n=read(),m=read();
memset(G,0x3f,sizeof(G));
for(int i=1;i<=n;i++)G[i][i]=0;
for(int i=1,x,y,z;i<=m;i++){
x=read(),y=read(),z=read();
G[x][y]=G[y][x]=min(G[x][y],z);
}
memcpy(d,G,sizeof(G));
}
void get_path(int i,int j){
if(!mid[i][j])return;
get_path(i,mid[i][j]);
p.push_back(mid[i][j]);
get_path(mid[i][j],j);
}
void solve(){
for(int k=1;k<=n;k++){
for(int i=1;i<k;i++)
for(int j=i+1;j<k;j++)
if((long long)d[i][j]+G[i][k]+G[k][j]<ans){
ans=d[i][j]+G[i][k]+G[k][j];
p.clear();
p.push_back(i);get_path(i,j);
p.push_back(j),p.push_back(k);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)if(d[i][j]>d[i][k]+d[k][j]){
d[i][j]=d[i][k]+d[k][j];
mid[i][j]=k;
}
}
if(ans==inf)puts("No solution.");
else for(int i=0;i<p.size();i++)printf("%d%c",p[i],i==p.size()-1?'\n':' ');
}
int main(){
read_and_parse();
solve();
return 0;
}
【POJ1734】Sightseeing Trip 无向图最小环的更多相关文章
- poj1734 Sightseeing trip【最小环】
Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions:8588 Accepted:3224 ...
- POJ 1734 Sightseeing trip(无向图最小环+输出路径)
题目链接 #include <cstdio> #include <string> #include <cstring> #include <queue> ...
- URAL 1004 Sightseeing Trip(最小环)
Sightseeing Trip Time limit: 0.5 secondMemory limit: 64 MB There is a travel agency in Adelton town ...
- poj1734 Sightseeing trip(Floyd求无向图最小环)
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...
- poj1734 Sightseeing trip[最小环]
一个最小环裸题.最小环的两种求法dijkstra和Floyd直接参见这里我就是从这里学的,不想写了. 注意这里最重要的一个点是利用了Floyd的dp过程中路径上点不超过$k$这一性质,来枚举环上最大编 ...
- POJ1734 Sightseeing trip (Floyd求最小环)
学习了一下用Floyd求最小环,思路还是比较清晰的. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring ...
- POJ1734 - Sightseeing trip
DescriptionThere is a travel agency in Adelton town on Zanzibar island. It has decided to offer its ...
- 「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd
题目描述 原题来自:CEOI 1999 给定一张无向图,求图中一个至少包含 333 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方 ...
- 【poj1734】Sightseeing trip
Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8520 Accepted: 3200 ...
随机推荐
- Mvc_model实体数据验证
MVC提供了很方便的数据验证,只需要在model里加入相关的正则等,那么就会在前台里生成相关的验证脚本.需要引用两个js文件: jquery.validate.min.js jquery.valida ...
- Python - 列表解析式
列表解析——用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 例子一: map(lambda x: x**2, range(6)) [0, ...
- kvm虚拟机日常操作命令梳理
KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理.废话不多说,下面列出kvm日常管理中的命令 1)查看KVM虚拟机配置文件及运行状态 KVM虚拟机默认配置文件位置: /etc/libvirt ...
- Python-列表-9
列表: Why: 我们现在已经学过的数据类型有:数字,布尔值,字符串,大家都知道数字主要用于计算,bool值主要是条件判断,只有字符串可以用于数据的存储,这些数据类型够用么?对于一门语言来说,肯定是不 ...
- 《Linux内核设计与实现》第四章学习笔记
<Linux内核设计与实现>第四章学习笔记 ——进程调度 姓名:王玮怡 学号:20135116 一.多任务 1.多任务操作系统的含义 多任务操作系统就是能同时并发地交 ...
- 【SE】Week3 : 四则运算式生成评分工具Extension&Release Version(附加题)
[附加题]第四阶段目标 - 界面模块,测试模块和核心模块的松耦合. 写到这里我只想吐槽一句,哪天我能写出功能复杂且真正松耦合的模块,我应该就不用写代码了吧[手动再见.. 当然这只是强调下松耦合和代码复 ...
- C#-ToString格式化
Int.ToString(format): 格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符,控制格式化输出的有效位数或小数位数,具体如下: 格式说明符 说明 ...
- /langversion 的选项“4”无效;必须是 ISO-1、ISO-2、3 或 Default SystemFrameWorkV3
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version Edit th ...
- [转帖]关于hostnamectl 命令
作者:Linux运维 来源:CSDN 原文:https://blog.csdn.net/linuxnews/article/details/51112022 版权声明:本文为博主原创文章,转载请附上博 ...
- ionic2添加 android平台出现的问题
nodejs版本不宜过高 cordova版本不宜过高 此情况应采取 cordova platform add android --nofetch