给定一张图,求图中一个至少包含三个点的环,环上的点不重复,并且环上的边的长度之和最小.

点数不超过100个

输出方案

无向图:

 /*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int mod = 1e9 + ;
const int gakki = + + + + 1e9;
const int MAXN = 3e2 + , MAXM = 2e5 + ;
int a[MAXN][MAXN], d[MAXN][MAXN], pos[MAXN][MAXN];
int n, m;
int ans = 0x3f3f3f3f;
vector<int> path;
void get_path(int x, int y)
{
if (pos[x][y] == )
{
return ;
}
get_path(x, pos[x][y]);
path.push_back(pos[x][y]);
get_path(pos[x][y], y);
}
int main()
{
scanf("%d %d", &n, &m);
mem(a, 0x3f);
for (int i = ; i <= n; i++)
{
a[i][i] = ;
}
for (int i = ; i <= m; i++)
{
int x, y, z;
scanf("%d %d %d", &x, &y, &z);
a[x][y] = a[y][x] = min(a[x][y], z);
}
memcpy(d, a, sizeof(a));
for (int k = ; k <= n; k++)
{
//刚开始循环时 d[i][j]表示经过编号不超过k-1的节点从i到j的最短路
for (int i = ; i < k; i++)
{
for (int j = i + ; j < k; j++)
{
if ((ll)d[i][j] + a[j][k] + a[k][i] < ans)
{
ans = d[i][j] + a[j][k] + a[k][i];
path.clear();
path.push_back(i);
get_path(i, j);
path.push_back(j), path.push_back(k);
}
}
}
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
if (d[i][j] > d[i][k] + d[k][j])
{
d[i][j] = d[i][k] + d[k][j];
pos[i][j] = k;
}
}
}
}
if (ans == 0x3f3f3f3f)
{
printf("No solution.\n");
}
else
{
for (int i = ; i < path.size(); i++)
{
printf("%d ", path[i]);
}
printf("\n");
}
return ;
}

//无向图最小环

有向图:

有向图直接floyd求出最小的自身到自身的距离 即为答案(注意初始化全为INF)

POJ 1734 无向图最小环/有向图最小环的更多相关文章

  1. POJ 1734.Sightseeing trip (Floyd 最小环)

    Floyd 最小环模板题 code /* floyd最小环,记录路径,时间复杂度O(n^3) 不能处理负环 */ #include <iostream> #include <cstr ...

  2. Sightseeing trip POJ - 1734 -Floyd 最小环

    POJ - 1734 思路 : Floyd 实质 dp ,优化掉了第三维. dp [ i ] [ j ] [ k ] 指的是前k个点优化后    i  ->  j   的最短路. 所以我们就可以 ...

  3. poj 1734 Sightseeing trip判断最短长度的环

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5590   Accepted: 2151 ...

  4. POJ 1734 Sightseeing trip(无向图最小环+输出路径)

    题目链接 #include <cstdio> #include <string> #include <cstring> #include <queue> ...

  5. poj 1734 Sightseeing trip_ 最小环记录路径

    题意:求最出小环,输出路径 #include <iostream> #include<cstdio> using namespace std; #define N 110 #d ...

  6. POJ 1734 求最小环路径 拓展Floyd

    九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11888019 题意: n个点 m条无向边 下面m条有权无向边 问图中最小环的路径 ...

  7. poj 1734 floyd求最小环,可得到环上的每个点

    #include<stdio.h> #include<string.h> #define inf  100000000 #define N 110 #define min(a, ...

  8. code forces 383 Arpa's loud Owf and Mehrdad's evil plan(有向图最小环)

    Arpa's loud Owf and Mehrdad's evil plan time limit per test 1 second memory limit per test 256 megab ...

  9. bzoj 1027 floyd求有向图最小环

    结合得好巧妙.... 化简后的问题是: 给你两个点集A,B,求B的一个子集BB,使得BB的凸包包含A的凸包,求BB的最小大小. 先特判答案为1,2的情况,答案为3的情况,我们先构造一个有向图: 对于B ...

随机推荐

  1. iOS上传图片问题

    今天一定得写一篇博客,有以下原因: 1>第一次做图片上传的功能,算是一种记录吧; 2>在这个问题上,纠结,迷茫了很久,主要还是被后台坑了; 1.上传图片的方法是用的AFNetWorking ...

  2. 2-0 虚拟机与Linux系统安装

    虚拟机与Linux系统安装 虚拟机硬件选择 由于是初学Linux,所以我们通过在虚拟机里安装的方式学习Linux,如果不知道找虚拟机和Linux的话请看我上一篇博客:计算机基础 如果你已经准备好了虚拟 ...

  3. HTML Img标签 src为网络地址无法显示图片问题解决(https)

    举例说明: <img src="https://pic.cnblogs.com/avatar/1549846/20191126100502.png" alt="加载 ...

  4. 【Lua程序设计第四版练习题答案】ch01 Lua语言入门

    联系1.1: 运行阶乘的示例并观察,如果输入负数,程序会出现什么问题?试着修改代码来解决问题.   -- 定义一个计算阶乘的函数 function fact (n) if n == 0 then re ...

  5. 通俗易懂的lambda表达式,不懂来找我!

    lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多.这里,我们通过阅读各方资料,总结了关于Python ...

  6. 【科普杂谈】一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了

    大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可 ...

  7. (转)使用 HTML5 WebSocket 构建实时 Web 应用

    HTML5 WebSocket 简介和实战演练 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例 ...

  8. nginx一些高级配置

    参数: https://www.wangbokun.com/%E8%BF%90%E7%BB%B4/2018/07/21/Nginx.html   免费证书等 1/ nginx代理hue限制上传文件大小 ...

  9. luoguP2822-组合数问题(基础DP)

    题目链接:https://www.luogu.org/problemnew/show/P2822 题意:输入T和k,有T组询问.每组询问输入n.m,求C(i,j)能模k的个数(0<=i<= ...

  10. 【转贴】Windows常用命令实例

    Windows常用命令实例 https://www.cnblogs.com/linyfeng/p/6261629.html 熟练使用DOS常用命令有助于提高工作效率. 1.windows+R:打开运行 ...