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

方法有点像floyd。若与k直接相连的 i 和 j 在不经过k的情况下已经连通,则有环。

注意区分直接连接和间接连接。

* 路径记录很好,pre[i][j]表示 i 到 j 的路径上 j 的前一个点;用固定的 i 保证了不混乱。新加入k的时候注意维护。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const ll N=,INF=0x7fffffff;
int n,m,pre[N][N],ans[N],cnt;
ll f[N][N],mn=INF,b[N][N];
int main()
{
int x,y;ll z;
memset(f,,sizeof f);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%lld",&x,&y,&z);
if(b[x][y])
f[x][y]=f[y][x]=b[x][y]=b[y][x]=min(f[x][y],z);
else
{
f[x][y]=f[y][x]=z;
b[x][y]=b[y][x]=z;
pre[x][y]=x;pre[y][x]=y;
}
}
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
{
if(b[i][k]&&b[j][k]&&f[i][j]<INF)
{
ll tmp=f[i][j]+b[i][k]+b[j][k];//不是f[i][k]
// if(k==5&&i==2&&j==3)printf("tmp=%lld\n",tmp);
if(tmp<mn)
{
// printf("i=%d j=%d k=%d fij=%lld tmp=%lld\n",i,j,k,f[i][j],tmp);
// printf("ij=%lld ik=%lld jk=%lld\n",f[i][j],f[i][k],f[j][k]);
mn=tmp;
cnt=;
for(int u=j;u!=i;u=pre[i][u])ans[++cnt]=u;
ans[++cnt]=i;ans[++cnt]=k;
}
}
// if(f[i][k]>INF||f[k][j]>INF)continue;//
ll tmp=f[i][k]+f[k][j];
if(tmp<f[i][j])
{
f[i][j]=f[j][i]=tmp;
pre[i][j]=pre[k][j];
pre[j][i]=pre[k][i];
// pre[i][j]=pre[j][i]=k;//错!不是直接相连!
// pre[i][k]=i;pre[j][k]=j;
// pre[k][i]=k;pre[k][j]=k;//
}
}
if(cnt)for(int i=;i<=cnt;i++)printf("%d ",ans[i]);
else printf("No solution.");
return ;
}

POJ1734无向图求最小环的更多相关文章

  1. poj1734Sightseeing trip——无向图求最小环

    题目:http://poj.org/problem?id=1734 无向图求最小环,用floyd: 在每个k点更新f[i][j]之前,以k点作为直接连到i,j组成一个环的点,这样找一下最小环: 注意必 ...

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

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

  3. POJ1734/Floyd求最小环

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6647   Accepted: 2538 ...

  4. 算法复习——floyd求最小环(poj1734)

    题目: 题目描述 N 个景区,任意两个景区之间有一条或多条双向的路来连接,现在 Mr.Zeng 想找一条旅游路线,这个路线从A点出发并且最后回到 A 点,假设经过的路线为 V1,V2,....VK,V ...

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

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

  6. FLOYD 求最小环

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

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

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

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

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

  9. floyd原理以及求最小环

    floyd这个东西学会了好久了,但是原理总是忘记,或者说没有真正的明白,这里在说一下. 我们要求的是任意的 i,j 之间的最短路径,用动态规划的思想来解决就是f[i,j,k]表示i到j中间节点不超过k ...

随机推荐

  1. 第5章——使用 Razor(MVC框架视图引擎)

    Razor 是MVC框架视图引擎的名称. 本章提供 Razor 语法的快速教程,以使你能够识别 Razor 表达式. 本章不打算提供 Razor 的完整参考,而将其视为一个语法速成教程.在本书的后续内 ...

  2. html5-磊哥

    <!doctype html><html lang="en">    <head>        <meta charset=" ...

  3. 华为root手机

  4. JS之Fetch

    细节叙述见以下链接:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch 1 基本概念:  WindowOrWo ...

  5. bzoj3332

    题解: 首先只有存在的路有可能有值 然后在存储矩阵的同时对于本来就有边的情况直接存下来这条边的值 然后跑一次最大生成树 在最大生成树的同时就可以求出矩阵的信息. 代码: #include<bit ...

  6. 不同数据库的driverClassName与url

    # Properties file with JDBC-related settings. ########## # HSQLDB # ########## #jdbc.driverClassName ...

  7. 去除字符串中的emoji字符

    对于使用utf8编码的mysql数据库来说,如果字符串中存在emoji小图像,是不能存进数据库中的,查了一下,原因大概是因为utf8编码可以存1-3个字节的字符,但是emoji是4个字节:解决方法可以 ...

  8. Ajax请求数据的两种方式

    ajax 请求数据的两种方法,有需要的朋友可以参考下. 实现ajax 异步访问网络的方法有两个.第一个是原始的方法,第二个是利用jquery包的 原始的方法不用引入jquery包,只需在html中编写 ...

  9. Error: timed out while waiting for target halted

    /************************************************************************************ * Error: timed ...

  10. Windows-CreateProcess-lpsiStartInfo-STARTUPINFO-dwFlags

    dwFlags: 简单地告诉CreateProcess函数结构中哪些成员有效: STARTF_USESIZE:使用dwXSize和dwYSize STARTF_USESHOWWINDOWS: wSho ...