This documentation is automatically generated by online-judge-tools/verification-helper
This project is maintained by tsutaj
// ワーシャルフロイド法 (全点対最短路問題) // 計算量 O(|V|^3 ) // 負の閉路があるかどうかは、d[i][i]が負になる頂点 i があるかどうかで判定可能 template <typename T> vector< vector<T> > warshall(vector< vector< Edge<T> > > &G) { int V = G.size(); vector< vector<T> > d(V); for(size_t i=0; i<V; i++) { for(size_t j=0; j<V; j++) { { if(i == j) d[i].push_back(0); else d[i].push_back(numeric_limits<T>::max()); } } } for(size_t i=0; i<V; i++) { for(size_t j=0; j<G[i].size(); j++) { Edge<T> e = G[i][j]; d[i][e.to] = e.cost; } } for(size_t k=0; k<V; k++) { for(size_t i=0; i<V; i++) { for(size_t j=0; j<V; j++) { if(d[i][k] != numeric_limits<T>::max() && d[k][j] != numeric_limits<T>::max()) d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } } } return d; } // (負の閉路があったら true になる bool minus) bool minus = false; vector< vector<Edge<T> > > G; vector< vector<T> > d = warshall(G); for(size_t i=0; i<G.size(); i++) if(d[i][i] < 0) minus = true;
#line 1 "graph/graph_003_warshall.cpp" // ワーシャルフロイド法 (全点対最短路問題) // 計算量 O(|V|^3 ) // 負の閉路があるかどうかは、d[i][i]が負になる頂点 i があるかどうかで判定可能 template <typename T> vector< vector<T> > warshall(vector< vector< Edge<T> > > &G) { int V = G.size(); vector< vector<T> > d(V); for(size_t i=0; i<V; i++) { for(size_t j=0; j<V; j++) { { if(i == j) d[i].push_back(0); else d[i].push_back(numeric_limits<T>::max()); } } } for(size_t i=0; i<V; i++) { for(size_t j=0; j<G[i].size(); j++) { Edge<T> e = G[i][j]; d[i][e.to] = e.cost; } } for(size_t k=0; k<V; k++) { for(size_t i=0; i<V; i++) { for(size_t j=0; j<V; j++) { if(d[i][k] != numeric_limits<T>::max() && d[k][j] != numeric_limits<T>::max()) d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } } } return d; } // (負の閉路があったら true になる bool minus) bool minus = false; vector< vector<Edge<T> > > G; vector< vector<T> > d = warshall(G); for(size_t i=0; i<G.size(); i++) if(d[i][i] < 0) minus = true;