Cod sursă (job #431368)

Utilizator avatar lucametehau Metehau Luca Mihnea lucametehau IP ascuns
Problemă Evacuare (lot liceu) Compilator cpp | 0,68 kb
Rundă Arhiva de probleme Status evaluat
Dată 6 feb. 2019 19:45:08 Scor 50
#include <fstream>
#include <vector>

using namespace std;

ifstream cin ("evacuare.in");
ofstream cout ("evacuare.out");

// ez pz dinamica pe graf
int n, m, x, a, b;

int dp[500005], p[500005];
vector <int> g[500005];

void dfs(int nod) {
  for(auto i : g[nod]) {
    int c = dp[nod] + (p[nod] != i);
    if(dp[i] > c) {
      dp[i] = c;
      dfs(i);
    }
  }
}

int main() {
  cin >> n >> m >> x;
  for(; m; m--) {
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  for(int i = 1; i <= n; i++) {
    cin >> p[i];
    dp[i] = 1e9;
  }
  dp[x] = 1;
  dfs(x);
  for(int i = 1; i <= n; i++)
    cout << dp[i] - 1 << "\n";
  return 0;
}