hdu 2066 一个人的旅行
2015-05-11 21:34
381 查看
主要是怎么解决超时,实际上不用floyd算法更好,但是老师拉的是floyd算法专题……
所以只好剪枝……
所以只好剪枝……
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; const int inf=1000000; int g[1024][1024]; int main() { int t,s,d,i,j,k,x,y,m,a[1024],b[1024],minx,n; while(~scanf("%d%d%d",&t,&s,&d)) { for(i=0; i<1024; i++) for(j=0; j<1024; j++) g[i][j]=inf; n=0; for(i=0; i<t; i++) { scanf("%d%d%d",&x,&y,&m); if(m<g[x][y]) g[x][y]=g[y][x]=m; if(n<x) n=x; if(n<y) n=y; } for(i=0; i<s; i++) scanf("%d",&a[i]); for(i=0; i<d; i++) scanf("%d",&b[i]); for(k=0; k<=n; k++) for(i=0; i<=n; i++) { if(g[i][k]==inf) continue; for(j=0; j<=n; j++) { if(g[i][k]+g[k][j]<g[i][j]) g[i][j]=g[i][k]+g[k][j]; } } minx=inf; for(i=0; i<s; i++) for(j=0; j<d; j++) { minx=min(minx,g[a[i]][b[j]]); } printf("%d\n",minx); } return 0; }
相关文章推荐
- HDU 2066 一个人的旅行 (最短路----floyd && dijkstra)
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- hdu 2066 一个人的旅行_最短路
- HDU 2066 一个人的旅行(Dijkstra算法)
- hdu 2066 一个人的旅行-spfa
- HDU 2066 一个人的旅行
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行 (最短路--Dijkstra算法)
- HDU-2066 一个人的旅行
- HDU - 2066 - 一个人的旅行
- HDU 2066 一个人的旅行
- HDU 2066 一个人的旅行 【Dijkstra】
- HDU - 2066 一个人的旅行 (Dijkstra)
- hdu 2066 一个人的旅行
- HDU 2066 一个人的旅行(Dijkstra模板题)
- HDU 2066 一个人的旅行(Dijkstra)
- hdu 2066 一个人的旅行 (DIJ)
- HDU 2066 一个人的旅行 (裸的dij)