HDU 2807 The Shortest Path 矩阵运算+最短路
2017-09-08 15:15
525 查看
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=2807题意
给定n个m*m的矩阵,对于A矩阵,C矩阵,如果存在B矩阵满足A*B = C,那么图中A->B有条权值为1的边。求最短路思路
蛮简单的一题居然给我写T了。建图直接按照题意描述建,跑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 9223372036854775807ll const int INF = ( 2e9 ) + 2; const ll maxn = 90; int mp[maxn][maxn][maxn]; int c[maxn][maxn],res[maxn][maxn]; int n,m; void mul(int b[maxn][maxn],int c[maxn][maxn]) { int t; memset(res,0,sizeof(res)); for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) { for(int k=1;k<=m;k++) res[i][j]+=b[i][k]*c[k][j]; } } bool same(int a[maxn][maxn]) { for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) if(res[i][j]!=a[i][j])return false; return true; } int main() { while(~scanf("%d%d",&n,&m)&&(n+m)) { memset(c,0,sizeof(c)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) for(int k=1;k<=m;k++) scanf("%d",&mp[i][j][k]); } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(i==j)continue; mul(mp[i],mp[j]); for(int k=1;k<=n;k++) { if(k!=i&&k!=j&&same(mp[k])) c[i][k]=1; } } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) { if(c[i][k]==0)continue; for(int j=1;j<=n;j++) if(c[k][j]!=0) { if(c[i][j]==0) c[i][j]=c[i][k]+c[k][j]; if(c[i][j]>c[i][k]+c[k][j]) c[i][j]=c[i][k]+c[k][j]; } } int q; scanf("%d",&q); for(int T=0;T<q;T++) { int u,v; scanf("%d%d",&u,&v); if(c[u][v]) printf("%d\n",c[u][v]); else printf("Sorry\n"); } } }
相关文章推荐
- HDU 2807 The Shortest Path 【最短路 + 快速判断矩阵是否相等】
- hdu 2807 The Shortest Path 优化矩阵运算+floyd
- hdu 2807 The Shortest Path(矩阵相乘+floyd)
- hdu 2807 The Shortest Path(矩阵优化)
- hdu 2807 The Shortest Path(矩阵)
- HDU 2807 The Shortest Path(最短路构造+Floyed算法)
- hdu 2807 The Shortest Path(最短路)
- HDU-2807 The Shortest Path 最短路
- 【HDU】2807 The Shortest Path 最短路
- Hdu 2807 The Shortest Path 矩阵相乘
- hdu 2807 The Shortest Path(矩阵计算+Floyd)
- HDU 2807 The Shortest Path 矩阵 + Floyd
- hdu 2807 The Shortest Path 矩阵
- hdu 2807 The Shortest Path【暴力/矩阵判等优化+Floyd】
- HDU 2807 The Shortest Path 把矩阵抽象成点+Floyd
- HDU The Shortest Path 矩阵的最短路
- HDU 2807 The Shortest Path(矩阵相乘+Floyd)
- HDU 2807 The Shortest Path【矩阵的快速比较】
- HDU 2807 The Shortest Path(3维矩阵转2维)
- HDU 4725 The Shortest Path in Nya Graph(最短路)