hdu1599

链接:点击打开链接

题意:有一些景点,看其中能从一个景点走至少要经过2个其他不同的景区,而且不能重复经过同一个景区,每条路线需要一些花费,找出一条花费最少的路线,如果不能输出It‘s impossible.

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define maxx 99999999
using namespace std;
int dis[105][105],s[105][105];
int n,m;
int floyd(){
    int i,j,k,ans;
    ans=maxx;
    for(k=1;k<=n;k++){
        for(i=1;i<k;i++)
        for(j=i+1;j<k;j++)                      //求的是可能经过k-1的i到j的花费最小值+s[j][k]+s[k][i],也就是从i开始
        ans=min(ans,dis[i][j]+s[j][k]+s[k][i]); //可能成环的最小值
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    }                                           //求的是可能经过k的i到j的花费最小值
    return ans;
}
int main(){                                     //就是求无向图最小环问题
    int i,j,a,b,c,temp;
    while(scanf("%d%d",&n,&m)!=EOF){
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        dis[i][j]=s[i][j]=maxx;
        for(i=1;i<=m;i++){
            scanf("%d%d%d",&a,&b,&c);
            if(s[a][b]>c){                      //这个要注意,他可能有重边,也就是同样的路径可能有两个不同的值
            dis[a][b]=dis[b][a]=c;
            s[a][b]=s[b][a]=c;
            }
        }
        temp=floyd();
        if(temp<maxx)
        printf("%d\n",temp);
        else
        printf("It's impossible.\n");
    }
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-18 06:42:53

hdu1599的相关文章

HDU1599杭州旅游

P2457 - [HDU1599]杭州旅游 Description 杭州有 N 个景区, 景区之间有一些双向的路来连接, 现在 8600 想找一条旅游路线, 这 个路线从 A 点出发并且最后回到 A 点. 假设经过的路线为 V1,V2,....VK,V1,那么必须满足 K>2,就是说至除了出发点以外至少要经 过 2 个其他不同的景区, 而且不能重复经过同一个景区. 现在 8600 需要你帮他找一条这样 的路线, 并且花费越少越好. Input 第一行是 2 个整数 N 和 M( N <= 80

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

[HDU1599]find the mincost route

Description [HDU1599]find the mincost route Solution 恶补图论,最小环问题的板子题 \(floyd\)来判最小环,复杂度\(O(n^3)\) 枚举\(k\)从\(1\)到\(n\) 最小环的\(i\)从\(1\)到\(k-1\),\(j\)从\(1\)到\(i-1\) 令\(ans=min(ans,f[i][j]+a[i][k]+a[k][j])\) 同时维护最短路数组的\(i\)从\(1\)到\(n\),\(j\)从\(1\)到\(n\) C

hdu1599 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): 3456    Accepted Submission(s): 1409 Problem Description 杭 州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为

hdu----(1599)最大子矩阵(几何/dp)

最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2915    Accepted Submission(s): 1462 Problem Description 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大. Input 输 入数据的第一行为一个正整数T,表示有T组测试数据.每一组测试数

最短路径问题小结

最短路径问题包括: 1.单源最短路. 2.任意两点间的最短路. 3.次短路和k短路. 4.差分约束系统. 5.DAG图上的单源最短路. 6.最小环. 一.单源最短路 算法: Dijkstra . Bellman - Ford .SPFA Dijkstra: 除了路径记录和更新距离数组的部分意外,和Prim算法的实现完全一样.使用邻接矩阵建图,时间复杂度为O(n*n).使用邻接表可能会快一些.堆优化比较麻烦,没学.缺点是图中不能含有负圈. Bellman - Ford :可以处理负圈.以链式前向星

生成树&amp;最短路总结篇

1.模板题  我是用prim搞得 给出每点坐标求最小生成树 hdu1162Eddy's picture 最小生成树 #include <iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int flag1=0; double sum; double arr_list[110][110]; struct Edge { int point; doub

关于Floyd求解最小环的问题

最近学习了floyd的奇妙用处,求解最小环,自己的领悟写在了纸上. 对于一个最小环,显然至少要包含三个点(此处不把两个点的回路称之为环) 从大体上考虑的话,一定有一个点与左右两侧的点是直接连接的(即不经其他点的松弛),我们不妨设这个点为k 对于floyd,也是也k的遍历作为松弛条件,所以考虑使用floyd求解最小环,显然k是逐渐增大的,也就是说除去k点的那个环剩下的那条最短路中一定不能有k, 否则会出现不是环的路径被错误的判定为环   ,如下图: 假设3已经成功的将1,2松弛,再次利用3来计算最