#include <iostream>
using namespace std;
#include <vector>
#include <queue>
using namespace std;
// 1. Fixed the signature: Passed vis and adj by reference.
// Renamed 'V' to 'src' to avoid confusion with the total number of vertices.
void bfs(int src, vector<vector<int>> &adj, vector<int> &vis) {
vis[src] = 1;
queue<int> q;
q.push(src);
while (!q.empty()) {
int v = q.front();
q.pop();
for (auto u : adj[v]) {
if (vis[u] != 1) {
vis[u] = 1;
q.push(u);
}
}
}
}
void dfs(int src, vector<vector<int>> &adj, vector<int> &vis){
vis[src] = 1;
for(auto &u : adj[src]){
if(vis[u] != 1){
vis[u] = 1;
dfs(u,adj,vis);
}
}
}
int findNumberOfComponent(int V, vector<vector<int>> &edges) {
// 2. Used standard vector of vectors instead of a VLA
vector<vector<int>> adj(V);
vector<int> vis(V, 0);
// Build the adjacency list
for (int i = 0; i < edges.size(); i++) {
adj[edges[i][0]].push_back(edges[i][1]);
adj[edges[i][1]].push_back(edges[i][0]);
}
int cnt = 0;
for (int i = 0; i < V; i++) {
if (!vis[i]) {
cnt++;
dfs(i, adj, vis);
}
}
return cnt;
}
int main() {
int V = 4;
vector<vector<int>> edges = {
{0, 1},
{1, 2}
};
cout<<findNumberOfComponent(V,edges);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCiAgICAvLyAxLiBGaXhlZCB0aGUgc2lnbmF0dXJlOiBQYXNzZWQgdmlzIGFuZCBhZGogYnkgcmVmZXJlbmNlLgogICAgLy8gUmVuYW1lZCAnVicgdG8gJ3NyYycgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcy4KICAgIHZvaWQgYmZzKGludCBzcmMsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJmFkaiwgdmVjdG9yPGludD4gJnZpcykgewogICAgICAgIHZpc1tzcmNdID0gMTsKICAgICAgICBxdWV1ZTxpbnQ+IHE7CiAgICAgICAgcS5wdXNoKHNyYyk7CiAgICAgICAgCiAgICAgICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICAgICAgaW50IHYgPSBxLmZyb250KCk7CiAgICAgICAgICAgIHEucG9wKCk7CiAgICAgICAgICAgIGZvciAoYXV0byB1IDogYWRqW3ZdKSB7CiAgICAgICAgICAgICAgICBpZiAodmlzW3VdICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICB2aXNbdV0gPSAxOwogICAgICAgICAgICAgICAgICAgIHEucHVzaCh1KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHZvaWQgZGZzKGludCBzcmMsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJmFkaiwgdmVjdG9yPGludD4gJnZpcyl7CiAgICAgICAgdmlzW3NyY10gPSAxOwogICAgICAgIGZvcihhdXRvICZ1IDogYWRqW3NyY10pewogICAgICAgICAgICBpZih2aXNbdV0gIT0gMSl7CiAgICAgICAgICAgICAgICB2aXNbdV0gPSAxOwogICAgICAgICAgICAgICAgZGZzKHUsYWRqLHZpcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIGludCBmaW5kTnVtYmVyT2ZDb21wb25lbnQoaW50IFYsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJmVkZ2VzKSB7CiAgICAgICAgLy8gMi4gVXNlZCBzdGFuZGFyZCB2ZWN0b3Igb2YgdmVjdG9ycyBpbnN0ZWFkIG9mIGEgVkxBCiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGooVik7CiAgICAgICAgdmVjdG9yPGludD4gdmlzKFYsIDApOyAKICAgICAgICAKICAgICAgICAvLyBCdWlsZCB0aGUgYWRqYWNlbmN5IGxpc3QKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgIGFkaltlZGdlc1tpXVswXV0ucHVzaF9iYWNrKGVkZ2VzW2ldWzFdKTsKICAgICAgICAgICAgYWRqW2VkZ2VzW2ldWzFdXS5wdXNoX2JhY2soZWRnZXNbaV1bMF0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpbnQgY250ID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFY7IGkrKykgewogICAgICAgICAgICBpZiAoIXZpc1tpXSkgewogICAgICAgICAgICAgICAgY250Kys7CiAgICAgICAgICAgICAgICBkZnMoaSwgYWRqLCB2aXMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBjbnQ7CiAgICB9CgppbnQgbWFpbigpIHsKICBpbnQgViA9IDQ7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGVkZ2VzID0gewogICAgICAgIHswLCAxfSwKICAgICAgICB7MSwgMn0KICAgIH07CiAgICBjb3V0PDxmaW5kTnVtYmVyT2ZDb21wb25lbnQoVixlZGdlcyk7Cn0=