• 题目大意

    求一个无向图的最小环

  • 题解

    假设是有向图的话。仅仅须要令f[i][i]=+∞,再floyd就可以;

    对无向图。应该在floyd算法循环至k的一開始进行例如以下操作:

    枚举i和j,假设点i存在经过点j的环,则用i→k。k→j,j→编号小于k的结点→i 的最短路去更新最小环的长度,

    即ans=min{ans,map[i][k]+map[k][j]+f[i][j]}

    然后更新最小环。

    这个工作进行完之后。才干够用floyd计算i→k→j的最短路。

  • Code

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int oo = 1000000000;
int n, m, map[110][110], pre[110][110], f[110][110];
int ans, path[110], top;
void init()
{
int x, y, z;
scanf("%d%d", &n, &m);
memset(f, -1, sizeof(f));
memset(map, -1, sizeof(map));
memset(pre, -1, sizeof(pre));
for(int i = 1; i <= m; ++i)
{
scanf("%d%d%d", &x, &y, &z);
if(f[x][y] == -1)
{
f[x][y] = f[y][x] = map[x][y] = map[y][x] = z;
}
else
{
f[x][y] = f[y][x] = map[x][y] = map[y][x] = min(map[x][y], z);
}
pre[x][y] = x;
pre[y][x] = y;
}
for(int i = 1; i <= n; ++i)
{
f[i][i] = map[i][i] = 0;
}
ans = oo;
}
void work()
{
for(int k = 1; k <= n; ++k)
{
for(int i = 1; i < k; ++i)
{
for(int j = i + 1; j < k; ++j)
{
if(map[i][k] != -1 && map[k][j] != -1 && f[i][j] != -1 && ans > f[i][j] + map[i][k] + map[k][j])
{
ans = f[i][j] + map[i][k] + map[k][j];
int t = j;
top = 0;
while(t != i)
{
path[++top] = t;
t = pre[i][t];
}
path[++top] = i;
path[++top] = k;
}
}
}
//以上为找最小环
//下面为floyd更新最短路
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
if(f[i][k] != -1 && f[k][j] != -1 && (f[i][j] == -1 || f[i][j] > f[i][k] + f[k][j]))
{
f[i][j] = f[i][k] + f[k][j];
pre[i][j] = pre[k][j];
}
}
}
}
if(ans == oo)
{
puts("No solution.");
return;
}
for(int i = 1; i <= top; ++i) printf("%d ", path[i]);
}
int main()
{
init();
work();
return 0;
}

Poj1734题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. [Code+#4]最短路 (最短路)

    [Code+#4]最短路 题目背景 在北纬 91° ,有一个神奇的国度,叫做企鹅国.这里的企鹅也有自己发达的文明,称为企鹅文明.因为企鹅只有黑白两种颜色,所以他们的数学也是以二进制为基础发展的. 比如 ...

  2. 《TCP/IP具体解释》读书笔记(19章)-TCP的交互数据流

    在TCP进行传输数据时.能够分为成块数据流和交互数据流两种.假设按字节计算.成块数据与交互数据的比例约为90%和10%,TCP须要同一时候处理这两类数据,且处理的算法不同. 书籍本章中以Rlogin应 ...

  3. Hive Cilent数据操作

    Hive运行命令方式有cli,jdbc.hwi.beeline.而我们经常使用的往往是cli shell 操作. cli shell hive -help hive --help 注:命令脚本必须在集 ...

  4. android系统又一次刷ROM简记(一)

    当须要对android系统进行大刀阔斧的改造的时候,应该清晰的了解android各个image的组成才干做到庖丁解牛. 首先在android烧写过程中须要烧写的文件主要包含uboot.bin\boot ...

  5. swift具体解释之八---------------下标脚本

    swift具体解释之八-----下标脚本 下标脚本 能够定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中.能够觉得是訪问对象.集合或序列的快捷方式.不须要 ...

  6. 线程池系列一:线程池作用及Executors方法讲解

    线程池的作用: 线程池作用就是限制系统中执行线程的数量.     根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果:少了浪费了系统资源,多了造成系统拥挤效率不高.用线程池控制线程数量 ...

  7. orm 通用方法——DeleteModel 主键删除

    定义代码: /** * 描述:删除对象 * 作者:Tianqi * 日期:2014-09-17 * param:model 对象实例,包含主键 * return:int 受影响行数 * return: ...

  8. 【转】Android应用底部导航栏(选项卡)实例

    现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...

  9. 分享js中的 sort 另一种用法

    // 看上去正常的结果: ['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft']; // apple排 ...

  10. Linux 桌面玩家指南:18. 我对 Docker 的使用的学习心得

    原文:Linux 桌面玩家指南:18. 我对 Docker 的使用的学习心得 特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记 ...