Cod sursa(job #1239186)

Utilizator irimiecIrimie Catalin irimiec Data 8 octombrie 2014 14:57:05
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

ifstream f("biperm.in");
ofstream g("biperm.out");

int aux, cicleleft, cicleright, viz[10001];
vector<int> in[2], vec[10001];
int n, len, compCiclice = 0;

void dfs(int nod) {
    viz[nod] = 1;
    len++;
    for(int i = 0; i < vec[nod].size(); ++i) {
        if(!viz[vec[nod][i]])
            dfs(vec[nod][i]);
    }
}

int main() {
    //f >> n;
    for(int i = 0; i < n; ++i) {
        f >> aux;
        in[0].push_back(aux);
    }
    for(int i = 0; i < n; ++i) {
        f >> aux;
        in[1].push_back(aux);
    }

    for(int i = 0; i < n; ++i) {
        if(vec[in[0][i]].empty())
            cicleleft++;
        else
            cicleright++;
        vec[in[0][i]].push_back(in[1][i]);
        vec[in[1][i]].push_back(in[0][i]);
    }
    for(int i = 0; i < n; ++i) {
        if(!viz[i]) {
            len = 0;
            dfs(i);
            if( len > 1 )
                compCiclice++;
        }
    }

    //g << (long long) powl(2, compCiclice);
    f >> n >> len;
    g << n + len;
}