首页 > 其他分享 >观光之旅

观光之旅

时间:2024-07-29 15:42:30浏览次数:10  
标签:输出 之旅 int 观光 getpath pos 无向 include

// 观光之旅.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
* https://www.acwing.com/problem/content/description/346/
* 
* 
给定一张无向图,求图中一个至少包含 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小。
该问题称为无向图的最小环问题。
你需要输出最小环的方案,若最小环不唯一,输出任意一个均可。

输入格式
第一行包含两个整数 N 和 M,表示无向图有 N 个点,M 条边。
接下来 M 行,每行包含三个整数 u,v,l,表示点 u 和点 v 之间有一条边,边长为 l。

输出格式
输出占一行,包含最小环的所有节点(按顺序输出),如果不存在则输出 No solution.。

数据范围
1≤N≤100,
1≤M≤10000,
1≤l<500
输入样例:
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


3 2
1 2 6
3 1 3

*/




#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using  namespace std;

typedef long long LL;
const int N = 105;
int d[N][N]; int g[N][N];
int pos[N][N];
int n, m;
vector<int> anspath;


void getpath(int a, int b) {
	if (pos[a][b] == 0) return;
	int k = pos[a][b];
	getpath(a, k);
	anspath.push_back(k);
	getpath(k,b);
}


int main()
{
	cin >> n >> m;
	memset(g, 0x3f, sizeof g);
	for (int i = 1; i <= m; i++) {
		int a, b, c; cin >> a >> b >> c;
		g[a][b] = min(g[a][b], c);
		g[b][a] = min(g[b][a], c);
	}

	memcpy(d, g, sizeof g);

	int ans = 0x3f3f3f3f;
	for (int k = 1; k <= n; k++) {

		for (int i = 1; i < k; i++) {
			for (int j = i+1; j < k; j++) {
				if ((LL)d[i][k] + d[k][j] + g[i][j] < ans) {
					ans = d[i][k] + d[k][j] + g[i][j];
					anspath.clear();
					anspath.push_back(k);
					anspath.push_back(i);
					getpath(i,j);
					anspath.push_back(j);
				}
			}
		}


		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				if (g[i][j] > g[i][k] + g[k][j]) {
					g[i][j] = g[i][k] + g[k][j];
					pos[i][j] = k;
				}
			}
		}
	}

	if (ans == 0x3f3f3f3f) {
		cout << "No solution." << endl;
	}
	else {
		for (int i = 0; i < anspath.size(); i++) {
			cout << anspath[i] << " ";
		}
		cout << endl;
	}

	return 0;
}

标签:输出,之旅,int,观光,getpath,pos,无向,include
From: https://www.cnblogs.com/itdef/p/18330207

相关文章

  • Python酷库之旅-第三方库Pandas(050)
    目录一、用法精讲181、pandas.Series.var方法181-1、语法181-2、参数181-3、功能181-4、返回值181-5、说明181-6、用法181-6-1、数据准备181-6-2、代码示例181-6-3、结果输出182、pandas.Series.kurtosis方法182-1、语法182-2、参数182-3、功能182-4、返回值1......
  • 开启孤独症康复之旅:上海孤独症学校的创新教育模式
    在繁华的上海,有一群特殊的孩子,他们生活在自己的世界里,难以与外界沟通和交流。为了帮助这些孤独症儿童,上海的孤独症学校不断探索和创新,开创出独特的教育模式,为孩子们的康复之旅点亮了希望之光。上海孤独症学校的创新教育模式首先体现在个性化的评估和定制化的教学方案上。当孩......
  • 深度解析Memcached:内存分配算法的优化之旅
    ......
  • 从996到副业过百万,程序员的副业新思路:在FlowUs上记录成长,分享知识,开启收益之旅
    在当今这个信息爆炸的时代,程序员们拥有的不仅仅是编码的能力,更是将技术转化为商业价值的潜力。下面,我将详细阐述一种适合程序员的生意思路,以展示如何利用技术背景和零散时间,实现个人成长与财富积累。一、技术积累与个人成长程序员的职业生涯是一个不断学习和成长的过程。利......
  • 从进化到创新 —— 生物大脑与现代 AI 的平行之旅
    Abstract作者研究了低延迟自然神经网络在生物进化中对于短期生存的必要性,以及这一现象在计算机设计与架构中发展低延迟高性能中央处理单元(CPU)的平行过程。为了准确高质量地显示动态图像,出现了专门的处理单元——图形处理单元(GPU),正如动物的特殊视觉皮层区域如何产生这种低......
  • Kylin Cube设计:维度自动分区的智能之旅
    KylinCube设计:维度自动分区的智能之旅在大数据时代,数据仓库的设计与优化是企业实现数据驱动决策的关键。ApacheKylin作为领先的分布式分析引擎,其Cube设计是实现高效数据查询的核心。本文将深入探讨Kylin的Cube设计是否支持维度的自动分区,并提供详细的解释和代码示例。引......
  • 《Python 基础方法的奇妙回顾之旅》
    1.学习内容1.1本篇博客主要是学过的方法进行总结:1.1.1 print()方法print方法是Python中最常用到的方法,print() 方法用于将指定的对象输出到控制台。语法:print(*objects,sep='',end='\n',file=sys.stdout,flush=False)objects:要输出的一个或多个对象,可以是字符串、......
  • 我可以写代码写到退休吗?记录我的10年前端技术之旅
    今天是2024年4月26日,是我的32岁生日,也是我从事前端开发十年的日子,这篇文章是对我职业生涯的一次回顾,这次回顾颇有感慨,不仅回顾了之前工作的公司、同事,也看了一遍之前写的代码、写的文章,还有以前看的技术书的笔记。本文就以技术栈为线,把这十年的前端经历串起来,一来让读者一窥这十......
  • 我可以写代码写到退休吗?记录我的10年前端技术之旅
    今天是2024年4月26日,是我的32岁生日,也是我从事前端开发十年的日子,这篇文章是对我职业生涯的一次回顾,这次回顾颇有感慨,不仅回顾了之前工作的公司、同事,也看了一遍之前写的代码、写的文章,还有以前看的技术书的笔记。本文就以技术栈为线,把这十年的前端经历串起来,一来让读者一......
  • Vn1c0rn的逆向之旅
    Study1、idashiftf12---跳转stringctrlx------交叉引用shifte-----数据导出a-----------转化为字符串数组\------------去除灰色的变量解释/------------添加注释N-----------重命名ctrlz------返回上一步,撤回原行为Y-----------重组数组(更改变量类型)*(shift+8)......