POJ1734无向图求最小环
题目: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无向图求最小环的更多相关文章
- poj1734Sightseeing trip——无向图求最小环
题目:http://poj.org/problem?id=1734 无向图求最小环,用floyd: 在每个k点更新f[i][j]之前,以k点作为直接连到i,j组成一个环的点,这样找一下最小环: 注意必 ...
- B. Shortest Cycle 无向图求最小环
题意: 给定 n 个点,每个点有一个权值a[i],如果a[u]&a[v] != 0,那么就可以在(u,v)之间连一条边,求最后图的最小环(环由几个点构成) 题解:逻辑运算 & 是二进制 ...
- POJ1734/Floyd求最小环
Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6647 Accepted: 2538 ...
- 算法复习——floyd求最小环(poj1734)
题目: 题目描述 N 个景区,任意两个景区之间有一条或多条双向的路来连接,现在 Mr.Zeng 想找一条旅游路线,这个路线从A点出发并且最后回到 A 点,假设经过的路线为 V1,V2,....VK,V ...
- POJ1734 Sightseeing trip (Floyd求最小环)
学习了一下用Floyd求最小环,思路还是比较清晰的. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring ...
- FLOYD 求最小环
首先 先介绍一下 FLOYD算法的基本思想 设d[i,j,k]是在只允许经过结点1…k的情况下i到j的最短路长度则它有两种情况(想一想,为什么):最短路经过点k,d[i,j,k]=d[i,k,k- ...
- hdu 1599 find the mincost route(无向图的最小环)
find the mincost route Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- 2021.11.03 P6175 无向图的最小环问题
2021.11.03 P6175 无向图的最小环问题 P6175 无向图的最小环问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给定一张无向图,求图中一个至少包含 33 ...
- floyd原理以及求最小环
floyd这个东西学会了好久了,但是原理总是忘记,或者说没有真正的明白,这里在说一下. 我们要求的是任意的 i,j 之间的最短路径,用动态规划的思想来解决就是f[i,j,k]表示i到j中间节点不超过k ...
随机推荐
- ORACLE中使用DBMS_SQL获取动态SQL执行结果中的列名和值
1.获取动态SQL中的列名及类型 DECLARE l_curid INTEGER; l_cnt NUMBER; l_desctab dbms_sql.desc_tab; l_sqltext ); BE ...
- 使用Bulk Binding批量绑定的模式高效处理ORACLE大量数据
用批量绑定(bulk binding)的方式.当循环执行一个绑定变量的sql语句时候,在PL/SQL 和SQL引擎(engines)中,会发生大量的上下文切换(context switc ...
- React路由配置使用
Router包安装: 安装包还是要打开命令行工具,使用npm来进行安装. npm install --save react-router react-router-dom 页面login: impor ...
- Vysor_v1.6.9
---恢复内容开始--- 装系统 D:\home sys 触摸板驱动 1 D:\envs\common\jdk jdk安装 2 DriveTheLife 3 img 4 PCMaster 5 Sogo ...
- webservice-jdk客户端代码
使用wsimport.exe 生成客户端代码 使用JDK的bin文件夹中,有一个wsimport.exe,这个工具依据wsdl文件生成相应的类文件,然后用这些文件就可以像调用本地类一样调用本地的类一样 ...
- git and github问题集锦
本人遇到的:
- 快速切题 poj2632
Crashing Robots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7799 Accepted: 3388 D ...
- 爬虫从网页中去取的数据中包含 空格
爬虫从网页中爬取的数据中带了一个 这样的空格,使用trim()函数和replace(" ", "")去掉不了,找了一下资料发现,空格有两种一种是从键盘输入的对应 ...
- v-text、v-html、v-cloak、v-pre.md
本篇文章,我们简单的介绍几个Vue内置指令的实现. v-text v-text的用法很简单,以下两个表达式的作用相同. <span v-text="msg"></ ...
- Linux下mysql操作
1.linux下MYSQL的启动与访问 http://www.cnblogs.com/hunter007/articles/2251795.html 2.linux下mysql基本的操作 http:/ ...