NEED HELP!!!

Правка en2, от RedImposter, 2025-07-03 13:57:40

Thanks for reading this blog.Actually i am stuck in a problem which can be considered as an easy dsu problem.What i am stuck with is my code.I am unable to figure out what is wrong with my logic.The problem statement says: Problem Description

Rishabh has a permutation A of N integers 1, 2, ... N but he doesn't like it. Rishabh wants to get a permutation B.

Also, Rishabh has some M good pairs given in a form of 2D matrix C of size M x 2 where (C[i][0], C[i][1]) denotes that two indexes of the permutation A.

In one operation he can swap Ax and Ay only if (x, y) is a good pair.

You have to tell whether Rishabh can obtain permutation B by performing the above operation any number of times on permutation A.

If the permutation B can be obtained return 1 else return 0.

Problem Constraints

2 <= N <= 105
1 <= M <= 105
1 <= A[i], B[i] <= N
A[i] and B[i] are all distinct.
1 <= C[i][0] < C[i][1] <= N

Input Format

First argument is an integer array A of size N denoting the permutation A.

Second argument is an integer array B of size N denoting the permutation B.

Third argument is an 2D integer array C of size M x 2 denoting the M good pairs.

Output Format

If the permutation B can be obtained return 1 else return 0.

My solution : int Solution::solve(vector &A, vector &B, vector<vector > &C) { vector<vector>g(A.size()+1); vectorvis(A.size()+1);

for(int i = 0;i < C.size();i++){
    g[A[C[i][0]-1]].push_back(A[C[i][1]-1]);
    g[A[C[i][1]-1]].push_back(A[C[i][0]-1]);
}

function <void(int)>dfs = [&](int node){
    vis[node] = true;
    for(auto child : g[node])
        if(!vis[child])dfs(child);
};

for(int i = 0;i < B.size();i++){
    if(B[i] != A[i] && (!vis[B[i]] && !vis[A[i]])){
        dfs(B[i]);
        if(!vis[A[i]]){
            return 0;
        }
    }
    if(vis[B[i]] && !vis[A[i]]){
        return 0;
    }


}

return 1;

} Can anyone help me point out if there is any mistake with my logic or code?I am not getting an AC with this code. Update: I had implemented a wrong checker for if(A[i] and B[i] are in same component or not). This code passed : vector<vector> g(N); vector component(N, 0); int comp_id = 1;

for (int i = 0; i < C.size(); i++) {
    g[A[C[i][0] - 1]].push_back(A[C[i][1] - 1]);
    g[A[C[i][1] - 1]].push_back(A[C[i][0] - 1]);
}

function<void(int)> dfs = [&](int node) {
    component[node] = comp_id;
    for (auto child : g[node]) {
        if (component[child] == 0) dfs(child);
    }
};

for (int i = 0; i < A.size(); i++) {
    if (component[A[i]] == 0) {
        dfs(A[i]);
        comp_id++;
    }
}

for (int i = 0; i < B.size(); i++) {
    if (A[i] != B[i] && component[A[i]] != component[B[i]]) {
        return 0;
    }
}

return 1;
Теги graphs, dsu, dfs and similar

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en3 Английский RedImposter 2025-07-03 13:58:36 2 Tiny change: 'is code.\nUpdate: ' -> 'is code.\n\nUpdate: '
en2 Английский RedImposter 2025-07-03 13:57:40 867
en1 Английский RedImposter 2025-07-03 10:28:42 2243 Initial revision (published)