Vijos1046观光旅游[floyd 最小环]

背景

湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观。学校认为大力发展旅游业,可以带来一笔可观的收入。

描述

学校里面有N个景点。两个景点之间可能直接有道路相连,用Dist[I,J]表示它的长度;否则它们之间没有直接的道路相连。这里所说的道路是没有规定方向的,也就是说,如果从I到J有直接的道路,那么从J到I也有,并且长度与之相等。学校规定:每个游客的旅游线路只能是一个回路(好霸道的规定)。也就是说,游客可以任取一个景点出发,依次经过若干个景点,最终回到起点。一天,Xiaomengxian决定到湖南师大附中旅游。由于他实在已经很累了,于是他决定尽量少走一些路。于是他想请你——一个优秀的程序员——帮他求出最优的路线。怎么样,不是很难吧?(摘自《郁闷的出纳员》)

格式

输入格式

对于每组数据:
第一行有两个正整数N,M,分别表示学校的景点个数和有多少对景点之间直接有边相连。(N<=100,M<=10000)
以下M行,每行三个正整数,分别表示一条道路的两端的编号,以及这条道路的长度。

输出格式

对于每组数据,输出一行:
如果该回路存在,则输出一个正整数,表示该回路的总长度;否则输出“No solution.”(不要输出引号)

样例1

样例输入1[复制]

5 7
1 4 1
1 3 300
3 1 10
1 2 16
2 3 100
2 5 15
5 3 20
4 3
1 2 10
1 3 20
1 4 30

样例输出1[复制]

61
No solution.

限制

各个测试点1s

来源

Ural
Xiaomengxian

---------------------

[2016年青岛市程序设计竞赛]第三题当时写了个dfs,不知道怎样

其实就是最小环,floyd边松弛边找小心3*INF溢出
一个环中的最大结点为k(编号最大),与他相连的两个点为i,j,这个环的最短长度为g[i][k]+g[k][j]+i到j的路径中,所有结点编号都小于k的最短路径长度
根据floyd的原理,在最外层循环做了k-1次之后,dist[i][j]则代表了i到j的路径中,所有结点编号都小于k的最短路径
综上所述,该算法一定能找到图中最小环。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
const int N=105,INF=1e6;
int n,m,u,v,w,d[N][N],a[N][N],ans=INF;
void floyd(){
    for(int k=1;k<=n;k++){
        for(int i=1;i<=k-1;i++)
            for(int j=i+1;j<=k-1;j++)
                ans=min(ans,d[i][j]+a[i][k]+a[k][j]);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
    }
}
int main(){
    while(cin>>n>>m){
        ans=INF;
        for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)  a[i][j]=d[i][j]=INF;
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&u,&v,&w);
            a[u][v]=a[v][u]=d[u][v]=d[v][u]=w;
        }
        floyd();
        if(ans==INF) printf("No solution.\n");
        else printf("%d\n",ans);
    }
}


时间: 2024-10-13 16:14:32

Vijos1046观光旅游[floyd 最小环]的相关文章

[vijos1046] 观光旅游

题目链接 题意:在图中找一个最小的经过三个以上结点的环 参考:http://blog.csdn.net/olga_jing/article/details/49928443 http://blog.csdn.net/zy691357966/article/details/45673647 用floyd的思想O(n3)处理出解 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int inf=2

hdoj 1599 find the mincost route【floyd+最小环】

find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3273    Accepted Submission(s): 1320 Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1

观光旅游

[题目描述] 旅游区里有N个景点.两个景点之间可能存在长度为A的双向道路. 旅游区规定,每个游客的旅游线路只能是一个回路.小明来到这里旅游,希望尽量少走一些路,请你帮他求出最优路线长度. [输入描述] 输入有多组数据,对于每组数据: 第一行输入两个正整数N.M,表示景点个数,以及有多少对景点之间存在道路(N ≤ 100,M ≤ 10000): 接下来M行,每行输入三个正整数,表示一条道路的两端的景点编号,以及这条道路的长度( ≤ 1000). [输出描述] 对于每组数据,如果该回路存在,则输出一

HDOJ--1599--find the mincost route(floyd+最小环)

find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3393    Accepted Submission(s): 1382 Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V

hdu 1599 floyd 最小环

floyd真的是水很深啊 各种神奇 #include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<stack> #define mem(a,b) memset(a,b,sizeof(a)) #define ll __int64 #define MAXN

Floyd最小环Hdu1599

http://acm.hdu.edu.cn/showproblem.php?pid=1599 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 #include <cstdio> #include <cstdlib

如何做好农业观光旅游规划和农业休闲旅游开发?

熊大寻旅游规划公司/文 农业旅游是一种新型农业生产经营形式 ,也是一种新型旅游活动项目 ,是在发展农业生产的基础上有机地附加了生态旅游观光功能的交叉性产业 ,是当今旅游新需求的必然产物.农业生态旅游是把农业.生态和旅游业结合起来,利用田园景观.农业生产活动.农村生态环境和农业生态经营模式,吸引游客前来观赏.品尝.作习.体验.健身.科学考察.环保教育.度假.购物的一种新型的旅游开发类型.生态农业旅游是近几年才兴起的一种新型的旅游方式,人们多居住在城市里面,对于农村的概念越来越模糊.所以根据人们返璞

vijos 观光旅游 最小环fl 呆详看

背景 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观.学校认为大力发展旅游业,可以带来一笔可观的收入. 描述 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它的长度:否则它们之间没有直接的道路相连.这里所说的道路是没有规定方向的,也就是说,如果从I到J有直接的道路,那么从J到I也有,并且长度与之相等.学校规定:每个游客的旅游线路只能是一个回路(好霸道的规定).也就是说,游客可以任取一个景点出发,依次经过若干个景点,最终回到起点.一天,Xiaomengxi

[BZOJ 1027][JSOI2007]合金(计算几何+Floyd最小环)

Description 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金的铁铝锡比重为用户所需要的比重. 现在,用户给出了n种他们需要的合金,以及每种合金中铁铝锡的比重.公司希望能够订购最少种类的原材料,并且使用这些原材料可以加工出用户需要的所有种类的合金. Solution 今天考试T3的70分算法似乎是这道原题(然而我没做过QwQ) 思路值得学习一下(