ワーシャルフロイド
vvpの形のグラフを入れる
wf(vvp) でvviに変換されて返ってくる
vector<vector<int>> wf(vector<vector<pair<int,int>>> v){
int n = v.size();
vector<vector<int>> dis(n);
for(int i = 0;i < n;i++){
vector<int> ans(n,inf);
ans[i] = 0;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
q.push({0,i});
while(q.size()!=0){
int cos = q.top().first;
int pos = q.top().second;
q.pop();
if(ans[pos] < cos)continue;
for(pair<int,int> p : v[pos]){
if(ans[p.first] > ans[pos]+p.second){
ans[p.first] = ans[pos]+p.second;
q.push({ans[pos]+p.second,p.first});
}
}
}
dis[i] = ans;
}
return dis;
}