hdu 检测赛(最短路中途必须经过两个点)
来源:互联网 发布:威风堂堂口型数据 编辑:程序博客网 时间:2024/06/05 11:47
Problem G
没做过这样的题目完全没思路
Problem Description
给定n个点,m条无向边,1为起点,求从起点出发,至少经过两个点(非起点)并且回到最终回到起点的最短路(中途可以经过起点)
点的编号为1到n
点的编号为1到n
Input
多组用例
每个用例的第一行是2个整数n和m(2<=n <= 100, m <= 1000)
接下来的m行里,每行包括3个整数a,b,c.代表a和b之间有一条通路,长度为c(0<c <= 100)
每个用例的第一行是2个整数n和m(2<=n <= 100, m <= 1000)
接下来的m行里,每行包括3个整数a,b,c.代表a和b之间有一条通路,长度为c(0<c <= 100)
Output
对于每个用例,输出最短路的长度,如果不存在最短路,输出-1
Sample Input
3 31 2 12 3 13 1 1
Sample Output
3没做过这样的题目完全没思路#include<stdio.h>#include<string>using namespace std;const int inf=1<<29;int n, m;int a[105][105];int main(){ while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=inf; for(int i =1;i<=m;++i) { int x,y,z; scanf("%d%d%d",&x,&y,&z); a[x][y]=min(a[x][y],z); a[y][x]=min(a[y][x],z); } for(int k=1;k<=n;++k) { for (int i=1;i<=n;++i) { for (int j=1;j<=n;++j) { a[i][j]=min(a[i][j],a[i][k] + a[k][j]); } } } int ans=inf; for(int i=2;i<=n;++i) { for (int j=i+1;j<=n;++j) { ans=min(ans,a[1][i]+a[i][j]+a[j][1]); } } if (ans==inf)ans=-1; printf("%d\n", ans); } return 0;}
没做过这样的题目完全没思路
0 0
- hdu 检测赛(最短路中途必须经过两个点)
- hdu 3832(最短路拆点)
- hdu 3873(有节点保护的最短路)
- HDU 5521 Meeting (最短路 + 拆点)
- HDU 5521 Meeting 【拆点+最短路】
- HDU 5521 Meeting 抽象点+最短路
- HDU 2544 最短路 (单源最短路)
- 最短路:带限制的最短路,邻接表建图,dijkstra ZOJ 3946+HDU 2680 (简单点的)
- hdu 1874 (最短路)
- hdu 3499 (最短路)
- hdu 2851(最短路)
- hdu 1548(最短路)
- hdu 3832(最短路)
- 最短路 (HDU 2544)
- HDU--2851(最短路)
- hdu 2544(最短路)
- hdu 1233(最短路)
- hdu 1546(最短路)
- 仿制新浪微博九宫格视图
- CentOS6.4系统下安装Tomcat7
- iOS滑动返回问题
- 蛇形填数
- 105.Find the Duplicate Number
- hdu 检测赛(最短路中途必须经过两个点)
- Openssl之BIO系列
- 怎样快速调节MindMapper 16中的分支形状
- ThinkPHP函数详解:A方法
- tnemelEkaePdniF.162
- HTTP基本认证
- android之回调函数的意义
- iOS 集成银联支付
- 【leetcode】Array—— Minimum Size Subarray Sum(209)