ワーシャルフロイド

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;
}