You are on page 1of 4

Problem 1:

Breadth First Search: Shortest Reach

Code:

vector<int> bfs(int n, int m, vector<vector<int>> edges, int s) {


vector<int> dist(n + 1, -1);
vector<set<int>> adj(n+1);

for(auto &e : edges) {


adj[e[0]].insert(e[1]);
adj[e[1]].insert(e[0]);
}
queue<int> q;
vector<bool> vis(n + 1, false);
q.push(s);
dist[s] = 0;
while(!q.empty()) {
auto p = q.front();
q.pop();
for(auto c : adj[p]) {
if (vis[c] == false) {
vis[c] = true;
dist[c] = dist[p] + 6;
q.push(c);
}
}
}

dist.erase(next(dist.begin(), s));
dist.erase(dist.begin());
return dist;
}

Output:
Problem 2:

Even Tree
Code:

int cnt = 0;

int dfs(int u, int par, vector<int> adj[], vector<int> &vis)


{
int sz = 1;

for(int v : adj[u])
{
if(!vis[v])
{
vis[v] = 1;
sz += dfs(v, u, adj, vis);
}
}
// cout<<u<<" "<<sz<<endl;
if(sz%2 == 0 && par != -1)
{
cnt++;
// cout<<par<<" "<<u<<endl;
return 0;
}
return sz;
}

int evenForest(int t_nodes, int t_edges, vector<int> t_from, vector<int> t_to)


{
vector<int> adj[t_nodes + 1], vis(t_nodes + 1, 0);

for(int i=0; i<t_edges; i++)


{
adj[t_from[i]].push_back(t_to[i]);
adj[t_to[i]].push_back(t_from[i]);
}

cnt = 0;
vis[1] = 1;
int tmp = dfs(1, -1, adj, vis);
return cnt;
}

Output:

You might also like