【poj1734】Sightseeing Trip

题目描述

给定一张无向图,求图中一个至少包含3个点的环,环上的节点不重复,并且环上的边的长度和最小。该问题被称为无向图的最小环问题。在本题中,你需要输出最小环的方案,若最小环不唯一,输出任意一个均可。若无解,输出 。

输入格式

第一行包含两个正整数和,分别表示图中有个节点条边。接下来行每行三个正整数,描述一条与之间权值为的无向边。

输出格式

输出仅一行,包含 或若干个空格隔开的正整数,以描述所求的最小环。

若有多种方案,仅要求输出任意一种。对于任意一种方案,请按环上的遍历顺序输出编号。

样例

Input

5 7
1 4 1
1 3 300
3 1 10
1 2 16
2 3 100
2 5 15
5 3 20

Output

1 3 5 2

题面描述的还是很清晰的,需要我们去找最小环,考虑用floyd,遍历找环的同时更新边的最小值。关于方案的记录,我们可以开一个pre数组记录当前路径中终点的上一个点,之后一个一个往前找就行了。

c o d e code code

#include<bits/stdc++.h>
using namespace std;
const int N=110,M=1e5+10,Inf=0x3f3f3f3f;
int n,m,pre[N][N];
long long dis[N][N],mp[N][N],minn=Inf;//这里开long long是因为在后面更新过程中相加会爆int。当然你也可以把Inf设得小一点,然后用int
int cnt,path[N],vis[N][N];

void floyd()
{
   
    for
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值