Advertisement
Tarche

Mago v0.1

Jul 22nd, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. //Lucas Hernan Tarche - ESCCP - 2020
  2. //OIAJ
  3. #include <bits/stdc++.h>
  4.  
  5. using namespace std;
  6.  
  7. bool mago(vector<int> cantInicial, vector<int> cantFinal, vector<int> a, vector<int> b, vector<int> &hechizos) {
  8.     vector<int> copiaInicial = cantInicial;
  9.     vector<int> copiaFinal = cantFinal;
  10.     sort(copiaInicial.begin(), copiaInicial.end());
  11.     sort(copiaFinal.begin(), copiaFinal.end());
  12.     if (copiaInicial != copiaFinal) return false;
  13.  
  14.     int n = cantInicial.size();
  15.     vector<vector<int>> ady(n);
  16.     for (int i = 0; i < a.size(); i++) {
  17.         ady[a[i]].push_back(b[i]);
  18.         ady[b[i]].push_back(a[i]);
  19.     }
  20.     queue<int> q;
  21.     q.push(0);
  22.     vector<bool> visited(n);
  23.     visited[0] = true;
  24.  
  25.     while(!q.empty()) {
  26.         int curr = q.front();
  27.         q.pop();
  28.         for (auto i : ady[curr]) {
  29.             if (visited[i]) continue;
  30.             visited[i] = true;
  31.             q.push(i);
  32.         }
  33.     }
  34.  
  35.     for (int i = 0; i < n; i++) {
  36.         if (visited[i]) continue;
  37.         if (cantInicial[i] == cantFinal[i]) continue;
  38.         return false;
  39.     }
  40.  
  41.     vector<bool> used(n);
  42.     for (int i = 0; i < a.size(); i++) {
  43.         int f = a[i], s = b[i];
  44.         if (used[f] && used[s]) {
  45.             continue;
  46.         }
  47.         else {
  48.             used[f] = true;
  49.             used[s] = true;
  50.             hechizos.push_back(i);
  51.         }
  52.     }
  53.  
  54.     return true;
  55. }
  56.  
  57. int main() {
  58.     int n;
  59.     cin >> n;
  60.     vector<int> cantInicial(n), cantFinal(n);
  61.     for (int i = 0; i < n; i++) {
  62.         cin >> cantInicial[i];
  63.     }
  64.     for (int i = 0; i < n; i++) {
  65.         cin >> cantFinal[i];
  66.     }
  67.     int k;
  68.     cin >> k;
  69.     vector<int> a(k), b(k);
  70.     for (int i = 0; i < k; i++) {
  71.         cin >> a[i] >> b[i];
  72.     }
  73.     vector<int> hechizos;
  74.     if (mago(cantInicial, cantFinal, a, b, hechizos)) {
  75.         cout << "SI" << '\n';
  76.         for (auto a : hechizos) {
  77.             cout << a << ' ';
  78.         }
  79.         cout << '\n';
  80.     }
  81.     else {
  82.         cout << "NO" << '\n';
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement