hdu 4396(spfs/二维最短路)
来源:互联网 发布:基本款斜挎包 知乎 编辑:程序博客网 时间:2024/06/04 18:07
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4396
思路:dist[i][j]表示到顶点i走了k条路所花费的最小时间,为了节省内存,当j>=k时,直接令j=k即可,然后就是二维spfa求最短路了。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<queue> 6 #include<vector> 7 using namespace std; 8 #define MAXN 5555 9 #define inf 1<<3010 struct Node{11 int v,w;12 };13 vector<Node>map[MAXN];14 typedef pair<int,int>Pair;15 16 int dist[MAXN][55];//表示到i点经过j条路的最小花费17 bool mark[MAXN][55];18 int n,m,st,ed,k;19 20 void spfa(){21 for(int i=0;i<=n;i++)22 for(int j=0;j<55;j++)23 dist[i][j]=inf;24 memset(mark,false,sizeof(mark));25 mark[st][0]=true;26 dist[st][0]=0;27 queue<Pair>Q;28 Q.push(make_pair(st,0));29 while(!Q.empty()){30 Pair pp=Q.front();31 Q.pop();32 int u=pp.first;33 int step=pp.second;34 mark[u][step]=false;35 for(int i=0;i<map[u].size();i++){36 int v=map[u][i].v;37 int w=map[u][i].w;38 int nstep=step+1;39 if(nstep>k)nstep=k;40 if(dist[v][nstep]>dist[u][step]+w){41 dist[v][nstep]=dist[u][step]+w;42 if(!mark[v][nstep]){ mark[v][nstep]=true;Q.push(make_pair(v,nstep)); }43 }44 }45 }46 }47 48 int main(){49 int u,v,w;50 while(~scanf("%d%d",&n,&m)){51 for(int i=0;i<=n;i++)map[i].clear();52 for(int i=1;i<=m;i++){53 scanf("%d%d%d",&u,&v,&w);54 Node p1,p2;55 p1.v=v,p1.w=w;56 p2.v=u,p2.w=w;57 map[u].push_back(p1);58 map[v].push_back(p2);59 }60 scanf("%d%d%d",&st,&ed,&k);61 k=k/10+(k%10!=0);62 spfa();63 if(dist[ed][k]!=inf){64 printf("%d\n",dist[ed][k]);65 }else66 puts("-1");67 }68 return 0;69 }
0 0
- hdu 4396(spfs/二维最短路)
- hdu - 4396 More lumber is required(二维最短路)
- Lightoj 1281 (二维最短路)
- 二维最短路
- hdu 3619 Heroes of Might and Magic 二维最短路
- HDU 2544 最短路 (单源最短路)
- hdu 1874 (最短路)
- hdu 3499 (最短路)
- hdu 2851(最短路)
- hdu 1548(最短路)
- hdu 3832(最短路)
- 最短路 (HDU 2544)
- HDU--2851(最短路)
- hdu 2544(最短路)
- hdu 1233(最短路)
- hdu 1546(最短路)
- hdu 3790(最短路)
- 最短路习题集(hdu)
- 《学习opencv》笔记——基本数据结构,CvMat,矩阵访问
- hdu 4034(floyd应用)
- hdu 3560(dfs判环)
- hdu 4293
- hdu 2608(找规律)
- hdu 4396(spfs/二维最短路)
- hdu 4360(最短路变形)
- hdu 3501(欧拉函数的应用)
- hdu 2988(kruskal求最小生成树)
- bnu 4359(数位dp)
- hdu 2236(最大匹配+枚举上下界)
- hdu 3861(缩点+最小路径覆盖)
- 关于tomcat服务器新学到的一些东西
- hdu 3335(最小路径覆盖)