Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define rep(i, a, b) for(int i = a; i < (b); ++i)
- #define sz(x) (int)x.size()
- #define isnum(c) (c >= '0' && c <= '9')
- #define endl "\n"
- using namespace std;
- #define MAXN 100
- #define INF 0x3f3f3f3f
- typedef pair<int, int> ii;
- int adjList[MAXN][MAXN], prox[MAXN][MAXN];
- int dist[MAXN], n, m;
- vector<int> path;
- void floydwarshall(){
- rep(k, 0, n){
- rep(i, 0, n){
- rep(j, 0, n){
- if(adjList[i][j] > adjList[i][k] + adjList[k][j]){
- adjList[i][j] = min(adjList[i][j], adjList[i][k] + adjList[k][j]), prox[i][j] = prox[i][k];
- }
- }
- }
- }
- }
- void Path(int u, int v){
- if(prox[u][v] == -1)
- return;
- path.push_back(u);
- while(u != v){
- u = prox[u][v];
- path.push_back(u);
- }
- }
- int main(){
- while(true){
- rep(i, 0, MAXN){
- rep(j, 0, MAXN){
- if(i == j){
- adjList[i][j] = 0;
- prox[i][j] = i;
- }
- else
- adjList[i][j] = INF, prox[i][j] = -1;
- }
- }
- //memset(adjList[i], 0, sizeof adjList[i]);
- int p, r;
- cin >> p >> r;
- if(!p && !r)
- break;
- int nvit;
- cin >> nvit;
- int vit[nvit];
- rep(i, 0, nvit)
- cin >> vit[i];
- n = p*p - r;
- cin >> m;
- rep(i, 0, m){
- int u, v, w;
- cin >> u >> v >> w;
- adjList[u-1][v-1] = w;
- prox[u-1][v-1] = v-1;
- }
- floydwarshall();
- cout << "Caminhos e esforco do robo do ponto de apoio ate as vitimas:\n";
- rep(i, 0, nvit){
- if(vit[i] <= n){
- cout << "Vitima " << i + 1<< ":\n";
- path.clear();
- Path(0, vit[i] - 1);
- for(auto &a: path){
- cout << a + 1 << " ";
- }
- cout << "esforco = " << adjList[0][vit[i] - 1] << endl;
- }
- }
- path.clear();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement