一个最小环裸题。最小环的两种求法dijkstra和Floyd直接参见这里我就是从这里学的,不想写了。

注意这里最重要的一个点是利用了Floyd的dp过程中路径上点不超过$k$这一性质,来枚举环上最大编号并枚举连边,这样另外枚举的两个点的最短路肯定不会经过和$k$连的边。

坑点:

  • 平常inf都开0x3f3f3f3f,这题没注意,在求环那里如果三个inf一加,就爆掉了。。所以要改小一点。这个问题值得重视。
  • Floyd正常输出路径应该就更新的时候记录中间点,最后直接递归输出。但是这里因为记录路径中$x$和$y$间的最短路必须是不经过当时的大于等于$k$的点的,所以最小环答案更新即记路径,不能到最后用Floyd转移数组输出路径。
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define dbg(x) cerr << #x << " = " << x <<endl
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,):;}
template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,):;}
template<typename T>inline void _swap(T&A,T&B){A^=B^=A^=B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=+,INF=0x0f0f0f0f;
int mp[N][N],dis[N][N],g[N][N],h[N][N],n,m,ans=INF,pt1,pt2,pt3;
void print(int i,int j){
if(!h[i][j]){printf("%d ",i);return;}
print(i,h[i][j]);
print(h[i][j],j);
}
void path(int i,int j){
h[i][j]=g[i][j];
if(!g[i][j])return;
path(i,g[i][j]),path(g[i][j],j);
} int main(){//freopen("test.in","r",stdin);//freopen("test.ans","w",stdout);
memset(mp,0x0f,sizeof mp),memset(dis,0x0f,sizeof dis);
read(n),read(m);
for(register int i=,x,y,z;i<=m;++i)read(x),read(y),read(z),dis[x][y]=dis[y][x]=mp[y][x]=mp[x][y]=_min(mp[x][y],z);
for(register int i=;i<=n;++i)dis[i][i]=mp[i][i]=;
for(register int k=;k<=n;++k){
for(register int i=;i<k;++i)
for(register int j=i+;j<k;++j)
if(MIN(ans,mp[i][k]+mp[j][k]+dis[i][j]))
pt1=i,pt2=j,pt3=k,path(i,j);//dbg(i),dbg(j),dbg(k);
for(register int i=;i<=n;++i)
for(register int j=;j<=n;++j)
if(MIN(dis[i][j],dis[i][k]+dis[k][j]))
g[i][j]=k;
}
if(ans<INF)print(pt1,pt2),printf("%d %d\n",pt2,pt3);
else puts("No solution.");
return ;
}

poj1734 Sightseeing trip[最小环]的更多相关文章

  1. poj1734 Sightseeing trip【最小环】

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:8588   Accepted:3224   ...

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

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

  3. poj1734 Sightseeing trip(Floyd求无向图最小环)

    #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...

  4. POJ1734 - Sightseeing trip

    DescriptionThere is a travel agency in Adelton town on Zanzibar island. It has decided to offer its ...

  5. 「POJ1734」Sightseeing trip

    「POJ1734」Sightseeing trip 传送门 这题就是要我们求一个最小环并且按顺序输出一组解. 考虑 \(O(n^3)\) 地用 \(\text{Floyd}\) 求最小环: 考虑 \( ...

  6. 「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd

    题目描述 原题来自:CEOI 1999 给定一张无向图,求图中一个至少包含 333 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方 ...

  7. 【poj1734】Sightseeing trip

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8520   Accepted: 3200 ...

  8. URAL 1004 Sightseeing Trip(最小环)

    Sightseeing Trip Time limit: 0.5 secondMemory limit: 64 MB There is a travel agency in Adelton town ...

  9. poj 1734 Sightseeing trip判断最短长度的环

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5590   Accepted: 2151 ...

随机推荐

  1. 调用存储在session属性里的东西

    将对象放在session里面 request.getSession().setAttribute("username", username); //放到会话里 永EL表达式调用 $ ...

  2. 在windows系统电脑上同时安装python2.x和python3.x版本

    在同一个电脑机子(windows系统)上安装同时安装python2.x和python3.x版本. 一.python2.x和python3.x安装 步骤1:在python官网(https://www.p ...

  3. Java中简单测试FastDFS的文件上传

    pom.xml文件内容如下: <dependencies> <!-- fastdfs --> <dependency> <groupId>org.cso ...

  4. 【Python】【基础知识】【异常】【Python的异常】报错、警告

    Python的异常 异常的层次结构: BaseException [所有异常的基类] +-- SystemExit [解释器请求退出] +-- KeyboardInterrupt [用户中断执行(通常 ...

  5. 「java.util.concurrent并发包」之 ReentrantReadWriteLock

    一 引言 在多线程的环境下,对同一份数据进行读写,会涉及到线程安全的问题.比如在一个线程读取数据的时候,另外一个线程在写数据,而导致前后数据的不一致性:一个线程在写数据的时候,另一个线程也在写,同样也 ...

  6. PHP+jQuery.photoClip.js支持手势的图片裁剪上传实例

    PHP+jQuery.photoClip.js支持手势的图片裁剪上传实例,在手机上双指捏合为缩放,双指旋转可根据旋转方向每次旋转90度,在电脑上鼠标滚轮为缩放,双击则顺时针旋转90度. 下面让我们来看 ...

  7. 数据库连接池的sqlhelper

    import pymysql import threading from DBUtils.PooledDB import PooledDB """ storage = { ...

  8. linux查询cpu过高原因--java

    1. 查询java pid top -c 2. 查询java进程下,线程情况 top -Hp pid(threadIdList) 3. 将10进制线程id转为16进制 printf "%x ...

  9. Tika检测文件类型

    Tika类型检测 Tika支持MIME所提供的所有互联网媒体文件类型.每当一个文件通过Tika检测到该文件,其文件类型.检测的介质类型,Tika内部通过以下机制. MIME标准 多用途Internet ...

  10. react中怎么写css样式?

    JSX基本语法中关于react如何写css样式主要有三种方法 1.基于class --(className) 基于className ,通过className在style中给该class名的DOM元素 ...