HDU 3631 Shortest Path Floyd
来源:互联网 发布:java sdk是什么 编辑:程序博客网 时间:2024/04/30 00:07
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=3631
题意
给定一含n个结点的有向带权图,编号0~n-1,每个点都有一个标记,初始时每个点都没被标记。然后给q个询问,每个询问的格式有两种。
1. 0 x:代表标记x结点。
2. 1 x y 代表求x到y的最短路,最短路只能走被标记的点。
思路
主要是求最短路,其他的注意细节。每个点被标记,那么就用这个点去松弛原来的图,用floyd算法思想。
#include<cstdio>#include<queue>#include<iostream>#include<vector>#include<map>#include<cstring>#include<string>#include<set>#include<stack>#include<algorithm>#define cle(a) memset(a,0,sizeof(a))#define inf(a) memset(a,0x3f,sizeof(a))#define ll long long#define Rep(i,a,n) for(int i=a;i<=n;i++)using namespace std;#define INF2 9223372036854775807llconst int INF = ( 2e9 ) + 2;const ll maxn = 310;const int maxm = 1e5+10;int mp[maxn][maxn],mark[maxn];int n,m,q;void floyd(int k){ for(int i=0; i<n; i++) { if(mp[i][k]==INF)continue; for(int j=0; j<n; j++) if(i!=k&&k!=j&&mp[k][j]!=INF&&mp[i][j]>mp[i][k]+mp[k][j]) mp[i][j]=mp[i][k]+mp[k][j]; }}int main(){ int cas=0; while(scanf("%d%d%d",&n,&m,&q)&&(n+m+q)) { memset(mark,0,sizeof(mark)); for(int i=0; i<n; i++) { mp[i][i]=0; for(int j=i+1; j<n; j++) mp[i][j]=mp[j][i]=INF; } for(int i=0; i<m; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); mp[u][v]=min(mp[u][v],w); } if(cas!=0)puts(""); printf("Case %d:\n",++cas); for(int T=0; T<q; T++) { int op,u,v; scanf("%d",&op); if(op==0) { scanf("%d",&u); if(mark[u]) { printf("ERROR! At point %d\n",u); continue; } mark[u]=1; floyd(u); } else { scanf("%d%d",&u,&v); if(!mark[u]||!mark[v]) { printf("ERROR! At path %d to %d\n",u,v); continue; } if(mp[u][v]!=INF) printf("%d\n",mp[u][v]); else printf("No such path\n"); } } }}
阅读全文
0 0
- 【HDU】3631 Shortest Path 【floyd】
- hdu 3631 Shortest Path (floyd)
- hdu 3631 Shortest Path【Floyd】
- hdu 3631 Shortest Path (floyd)
- HDU 3631 Shortest Path Floyd
- hdu 3631 Shortest Path(floyd插点法)
- HDU 3631 Shortest Path(Floyd变形)
- hdu 3631 Shortest Path(Floyd)
- hdu 3631 Shortest Path(Floyd)
- HDU - 3631 Shortest Path(Floyd最短路)
- hdu 3631 Shortest Path floyd 解题报告
- hdu 3631 Shortest Path (floyd)
- HDU 5636:Shortest Path floyd
- HDU 5636:Shortest Path【Floyd】
- HDU 3631(Shortest Path) 最短路问题 (Floyd)
- HDU 3631 Shortest Path (Floyd的深层理解)
- hdu 3631 Shortest Path 最短路径+插点法+floyd
- Hdu 3631 Shortest Path(Floyd插点)
- 看图说mapreduce的shuffle机制
- 页面底部功能区布局
- HDU 1003最大子段和
- Android高级进阶-换肤
- 数据结构(Java)---线性表
- HDU 3631 Shortest Path Floyd
- Gan与imitation learning,theano平台搭建 (2)
- 235/236. Lowest Common Ancestor of a Binary Search Tree/Lowest Common Ancestor of a Binary Tree
- HDOJ HDU 1047 Integer Inquiry
- JAVA工具类(8) --- json转换工具类(对象与json转换)
- java &&和&,||和|
- codeforces 822A I'm bored with life
- Easypack:安全防护工具之:ClamAV之一键安装
- 对象成员及初始化列表的使用demo