Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Lucas Hernan Tarche - ESCCP - 2020
- //OIAJ
- #include <bits/stdc++.h>
- using namespace std;
- bool mago(vector<int> cantInicial, vector<int> cantFinal, vector<int> a, vector<int> b, vector<int> &hechizos) {
- vector<int> copiaInicial = cantInicial;
- vector<int> copiaFinal = cantFinal;
- sort(copiaInicial.begin(), copiaInicial.end());
- sort(copiaFinal.begin(), copiaFinal.end());
- if (copiaInicial != copiaFinal) return false;
- int n = cantInicial.size();
- vector<vector<int>> ady(n);
- for (int i = 0; i < a.size(); i++) {
- ady[a[i]].push_back(b[i]);
- ady[b[i]].push_back(a[i]);
- }
- queue<int> q;
- q.push(0);
- vector<bool> visited(n);
- visited[0] = true;
- while(!q.empty()) {
- int curr = q.front();
- q.pop();
- for (auto i : ady[curr]) {
- if (visited[i]) continue;
- visited[i] = true;
- q.push(i);
- }
- }
- for (int i = 0; i < n; i++) {
- if (visited[i]) continue;
- if (cantInicial[i] == cantFinal[i]) continue;
- return false;
- }
- vector<bool> used(n);
- for (int i = 0; i < a.size(); i++) {
- int f = a[i], s = b[i];
- if (used[f] && used[s]) {
- continue;
- }
- else {
- used[f] = true;
- used[s] = true;
- hechizos.push_back(i);
- }
- }
- return true;
- }
- int main() {
- int n;
- cin >> n;
- vector<int> cantInicial(n), cantFinal(n);
- for (int i = 0; i < n; i++) {
- cin >> cantInicial[i];
- }
- for (int i = 0; i < n; i++) {
- cin >> cantFinal[i];
- }
- int k;
- cin >> k;
- vector<int> a(k), b(k);
- for (int i = 0; i < k; i++) {
- cin >> a[i] >> b[i];
- }
- vector<int> hechizos;
- if (mago(cantInicial, cantFinal, a, b, hechizos)) {
- cout << "SI" << '\n';
- for (auto a : hechizos) {
- cout << a << ' ';
- }
- cout << '\n';
- }
- else {
- cout << "NO" << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement