arc159a
题目链接:https://atcoder.jp/contests/arc159/tasks/arc159_a
打个表可以发现,每一个复制块的的最短路都相等。
思路:对询问的两个值进行取模运算,再到原最短路上进行查询即可。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int dist[N][N];
void solve(){
int n,m;
cin>>n>>m;
memset(dist,0x3f,sizeof(dist));
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
int x;
cin>>x;
if (x) dist[i][j] = 1;
}
}
for (int k=1;k<=n;k++){
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
dist[i][j] = min(dist[i][j],dist[i][k]+dist[k][j]);
}
}
}
int q;
cin>>q;
for (int i=1;i<=q;i++){
long long x,y;
cin>>x>>y;
x = (x%n==0)?n:x%n;
y = (y%n==0)?n:y%n;
if (dist[x][y]==0x3f3f3f3f) cout<<-1<<'\n';
else cout<<dist[x][y]<<'\n';
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T;
T = 1;
//cin>>T;
while(T--) solve();
return 0;
}
浙公网安备 33010602011771号