# HackerEarth One and only flow problem solution

In this HackerEarth One and only flow problem solution You are given a network of directed graph of N vertices and M edges, where every edges' capacity is 1. An ordered pair (u,v),u!=v is good, if the maxflow is exactly 1 upon setting u as the source vertex and v as the sink vertex of the flow network. Find out if all of the ordered pairs (u,v),u!=v are good or not.

## HackerEarth One and only flow problem solution.

`#include  <bits/stdc++.h>using namespace std;const int maxn = 2e5 + 5;int n, m, tot[maxn];bool vis[maxn], onstk[maxn], ans;vector<int> g[maxn];void dfs(int u) {    vis[u] = onstk[u] = 1;    for(int v : g[u]) {        if(vis[v]) {            if(!onstk[v]) {                ans = 0;            } else {                tot[v]--;                tot[u]++;            }        } else {            dfs(v);            tot[u] += tot[v];        }    }    if(u != 1 and tot[u] != 1) {        ans = 0;    }    onstk[u] = 0;}int main(int argc, char const *argv[]){    int t;    scanf("%d", &t);    while(t--) {        scanf("%d %d", &n, &m);        for(int i = 1; i <= n; i++)            g[i].clear();        for(int i = 0; i < m; i++) {            int u, v;            scanf("%d %d", &u, &v);            if(u != v) {                g[u].emplace_back(v);            }        }        fill(vis, vis + n + 1, 0);        fill(tot, tot + n + 1, 0);        ans = 1;        dfs(1);        int cnt = 0;        for(int i = 1; i <= n; i++)            cnt += vis[i];        if(cnt != n) {            ans = 0;        }        if(ans) {            puts("Yes");        } else {            puts("No");        }    }    return 0;}`