题意:
Liulex是数学天才,他最近发明了一种矩阵运算,这种运算适用于方阵(即行列相等)。这种运算非常类似矩阵乘法,具体计算方式如下:
ai,j为A矩阵第i行第j列的元素,bi,j为B矩阵第i行第j列的元素,ci,j为C矩阵第i行第j列的元素,定义新运算A*B=C,则ci,j=mink(ai,k+bk,j)。
Liulex想知道对于一个n行n列矩阵A自己的n次幂是多少,这个矩阵的主对角线元素为0,即ai,i=0,请你帮忙计算一下吧。
数据范围:n<=700
解法:
将ai,j看作是点 i 到点 j 的最短路,那么一次新运算就是用点k拓展最短路。
floyd算一遍就是答案,傻逼了一波。
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PI pair<int,int>
const int maxm=777;
int a[maxm][maxm];
int n;
signed main(){
ios::sync_with_stdio(0);
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)continue;
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<' ';
}
cout<<endl;
}
return 0;
}