题目:http://poj.org/problem?id=1734

无向图求最小环,用floyd;

在每个k点更新f[i][j]之前,以k点作为直接连到i,j组成一个环的点,这样找一下最小环;

注意必须存直接相连的边,在找环时k点连到i,j的值不能是最短路。

调了一个小时发现把z打成y了......

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,f[][],pre[][],ans,path[],inf=1e9,top;
int sid[][];//真的有必要存直接相连的边
int main()
{
scanf("%d%d",&n,&m);
memset(f,-,sizeof f);
memset(sid,-,sizeof sid);
ans=inf;
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(f[x][y]==-)//
{
f[x][y]=f[y][x]=z;
pre[x][y]=x;pre[y][x]=y;
sid[x][y]=z;sid[y][x]=z;
}
else
f[x][y]=f[y][x]=sid[x][y]=sid[y][x]=min(f[x][y],z);
}
for(int k=;k<=n;k++)
{
for(int i=;i<k;i++)//找环
for(int j=i+;j<k;j++)
{
// if(k==5)printf("i=%d j=%d ans=%d %d\n",i,j,ans,f[i][j]+sid[i][k]+sid[k][j]);
if(f[i][j]!=-&&sid[i][k]!=-&&sid[k][j]!=-&&ans>f[i][j]+sid[i][k]+sid[k][j])
{
ans=f[i][j]+sid[i][k]+sid[k][j];
// printf("sid[%d][%d]=%d\n",k,j,sid[k][j]);
// printf("ans=%d\n",ans);
// printf("!f[%d][%d]=%d f[%d][%d]=%d\n",i,k,f[i][k],k,j,f[k][j]);
top=;
int t=j;
while(t!=i)
{
path[++top]=t;
t=pre[i][t];
}
path[++top]=i;
path[++top]=k;//前提为k为单出一点
}
}
for(int i=;i<=n;i++)//
for(int j=;j<=n;j++)//
if(f[i][k]!=-&&f[k][j]!=-&&(f[i][j]>f[i][k]+f[k][j]||f[i][j]==-))//
{
// printf("f[%d][%d]=%d f[%d][%d]=%d\n",i,k,f[i][k],k,j,f[k][j]);
f[i][j]=f[i][k]+f[k][j];
pre[i][j]=pre[k][j];
} }
if(ans==inf)printf("No solution.");
else
{
for(int i=;i<=top;i++)
printf("%d ",path[i]);
}
return ;
}

poj1734Sightseeing trip——无向图求最小环的更多相关文章

  1. B. Shortest Cycle 无向图求最小环

    题意: 给定 n 个点,每个点有一个权值a[i],如果a[u]&a[v] != 0,那么就可以在(u,v)之间连一条边,求最后图的最小环(环由几个点构成) 题解:逻辑运算 & 是二进制 ...

  2. #10072. 「一本通 3.2 例 1」Sightseeing Trip(floyd求最小环+路径)

    https://loj.ac/problem/10072 针对无向图 因为Floyd是按照结点的顺序更新最短路的,所以我们在更新最短路之前先找到一个连接点k,当前的点k肯定不存在于已存在的最短路f[i ...

  3. POJ1734无向图求最小环

    题目:http://poj.org/problem?id=1734 方法有点像floyd.若与k直接相连的 i 和 j 在不经过k的情况下已经连通,则有环. 注意区分直接连接和间接连接. * 路径记录 ...

  4. 【POJ1734】Sightseeing Trip 无向图最小环

    题目大意:给定一个 N 个顶点的无向图,边有边权,如果存在,求出该无向图的最小环,即:边权和最小的环,并输出路径. 题解:由于无向图,且节点数较少,考虑 Floyd 算法,在最外层刚开始遍历到第 K ...

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

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

  6. POJ1734 Sightseeing trip (Floyd求最小环)

    学习了一下用Floyd求最小环,思路还是比较清晰的. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring ...

  7. FLOYD 求最小环

    首先 先介绍一下 FLOYD算法的基本思想   设d[i,j,k]是在只允许经过结点1…k的情况下i到j的最短路长度则它有两种情况(想一想,为什么):最短路经过点k,d[i,j,k]=d[i,k,k- ...

  8. hdu 1599 find the mincost route(无向图的最小环)

    find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  9. 2021.11.03 P6175 无向图的最小环问题

    2021.11.03 P6175 无向图的最小环问题 P6175 无向图的最小环问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给定一张无向图,求图中一个至少包含 33 ...

随机推荐

  1. Linux进入单用户模式

    有时候配置linux的过程中,因为一些误操作导致系统初始化时堵塞或挂起而无法进入系统,原因往往是因为配置文件设置错误,部分文件被误删之类.遇到这种情况一般新手的做法就是重装(虚拟机不装白不装),但在实 ...

  2. SQL Server 的collate的含义

    什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server 2000 中,字符串的物理存储由排序规则控制.排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规 ...

  3. spring boot json 首字母大小写问题解决方案

     spring boot默认使用的json解析框架是jackson,对于.net转java的项目来说太坑了,首字母大写的属性会自动转为小写,然后前端就悲剧了,十几个属性的ViewModel增加几个Js ...

  4. 实模式切换到保护模式,为什么要开启A20地址线(系统升级产生的兼容性问题)

    [-1]写在前面: 以下部分内容总结于 http://blog.csdn.net/ruyanhai/article/details/7181842 complementary: 兼容性是指运行在前期C ...

  5. 将參数从PHP传递到JavaScript中

    php: //自己定义数组參数 $newarr = array('a1' => 'a1', 'a2' => 'a2', 'a3' => 'a3'); $config = CJavaS ...

  6. 使用@Scheduled注解编写spring定时任务

    import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframewor ...

  7. ES mapping映射及优化

    mapping映射 主要类型: 同一index下,不同type中如果有相同filed:es进行mapping映射的时候,按照先写进去的指定类型:比如同一index,包含的type中都有key1字段,如 ...

  8. struct对齐

    1 基本数据类型的自然对齐 就是说,基本数据类型的变量不能随便放在内存的任意位置,它们的起始地址必须被它们的大小整除. double是8个字节,float,int,enum是4字节,bool.char ...

  9. me12里更改信息记录的净价和有效价格,以及信息记录的条件价格

    转自 http://blog.csdn.net/zeewjj/article/details/7941525REPORT ztest. DATA:l_kbetr LIKE konp-kbetr.l_k ...

  10. IDA调试android so的.init_array数组

    参考: http://www.itdadao.com/articles/c15a190757p0.html 一. 为什么要调试init_array init_array的用途 1. 一些全局变量的初始 ...