• 题目大意

    求一个无向图的最小环

  • 题解

    假设是有向图的话。仅仅须要令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. 今日SGU 5.25

    SGU 194 题意:无源汇有上下界的最大流 收获:https://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html #include<bit ...

  2. ArcGIS api for javascript——加载查询结果,单击显示信息窗口

    描述 本例在开始和地图交互前执行一个查询并加载结果.这允许用户点击任意郡县立即看到一个InfoWindow. QueryTask构造函数接受被查询的图层,即ESRI sample server上ESR ...

  3. Android中集成ffmpeg(一):编译ffmpeg

    方案选择 Android中集成ffmpeg的codec功能无非两种方式: JNI直接调用,主要用于App开发(无权限修改系统底层),如EXOPlayer,JPlayer等. 集成ffmpeg到OMX, ...

  4. jQuery插件开发初探

    最简单的插件 $.fn.changeStyle = function (colorStr) { $(this).css('color',colorStr); } 应用如下: <!DOCTYPE ...

  5. BZOJ 1055 DP

    思路: f[i][j][k]表示i到j匹配了字母k if(m,n能匹配上k) f[i][j][k]|=f[i][l][m]&f[l+1][j][n] 一个大枚举 就OK了~ //By Siri ...

  6. 使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控--转

    原文地址:http://mp.weixin.qq.com/s?__biz=MzAxODcyNjEzNQ==&mid=2247483789&idx=1&sn=ae11f04780 ...

  7. 由安装两块网卡的linux系统中引起网络不通想到的

    由安装两块网卡的linux系统中引起网络不通想到的 一天,小王突然急匆匆的来找我,他说:"我在机子上刚装的redhat怎么老也ping不通服务器,我网卡的驱动都安装了,ping 自己的两块网 ...

  8. 简单的字符串压缩--C代码

    #include <stdio.h> #include <string.h> bool compress(char *str) { char *p=str,c; ; if(!s ...

  9. HP 1022N 网络打印机安装步骤

    HP 1022N 网络打印机安装步骤

  10. JavaScript笔记(4)

    接上一篇笔记    -----> 打印:                    打印:    打印: 一.break 和 continue 的区别 1.break 1.break语句可用于跳出循 ...