diff --git a/C++/Kosaraju's algorithm.cpp b/C++/Kosaraju's algorithm.cpp new file mode 100644 index 0000000..402e664 --- /dev/null +++ b/C++/Kosaraju's algorithm.cpp @@ -0,0 +1,98 @@ +//Name-Avnish Kumar +//Github id-Avnish010 +#include +using namespace std; +typedef long long int ll; +#define mod 100000000 +#define M 0 +#define fastIO \ + ios_base::sync_with_stdio(false); \ + cin.tie(NULL); \ + cout.tie(NULL) +#define endl "\n" +#define mp make_pair +#define pb push_back +#define pf push_front +#define ub upper_bound +#define lb lower_bound +#define mod1 1000000009 +#define mem(a, val) memset(a, val, sizeof(a)) +#define vi vector +#define vvl vector> +#define vl vector +#define vpl vector> +#define vpi vector> +#define msi map +vi adj[100005]; +vi adjt[100005]; +int vis[100005]; +vi order; // for first dfs having increasing outtime order +vi scc; +void dfs(int v) +{ + vis[v] = 1; + for (auto x : adj[v]) + { + if (!vis[x]) + { + dfs(x); + } + } + order.pb(v); +} +void dfst(int v) +{ + vis[v] = 1; + for (auto x : adjt[v]) + { + if (!vis[x]) + { + dfst(x); + } + } + scc.pb(v); +} + +int main() +{ + int t; + cin >> t; + while (t--) + { + int n, m, u, v; + cin >> n >> m; + for (int i = 1; i <= n; i++) + { + adj[i].clear(), adjt[i].clear(), vis[i] = 0; + } + order.clear(); + for (int i = 1; i <= m; i++) + { + cin >> u >> v; + adj[u].pb(v); + adjt[v].pb(u); + } + for (int i = 1; i <= n; i++) + { + if (!vis[i]) + dfs(i); + } + for (int i = 1; i <= n; i++) + { + vis[i] = 0; + } + for (int i = 1; i <= n; i++) + { + if (!vis[order[n - i]]) + { + scc.clear(); + dfst(order[n - i]); + cout << "dfst is called for" << order[n - i] << " " << endl; + + for (int i : scc) + cout << i << " "; + cout << endl; + } + } + } +} diff --git a/C++/Kruskal Algorithm.cpp b/C++/Kruskal Algorithm.cpp new file mode 100644 index 0000000..64d8bc2 --- /dev/null +++ b/C++/Kruskal Algorithm.cpp @@ -0,0 +1,76 @@ +//Name-Avnish Kumar +//Github id-Avnish010 +#include +using namespace std; +typedef long long int ll; +#define mod 100000000 +#define M 0 +#define fastIO \ + ios_base::sync_with_stdio(false); \ + cin.tie(NULL); \ + cout.tie(NULL) +#define endl "\n" +#define mp make_pair +#define pb push_back +#define pf push_front +#define ub upper_bound +#define lb lower_bound +#define mod1 1000000009 +#define mem(a, val) memset(a, val, sizeof(a)) +#define vi vector +#define vvl vector> +#define vl vector +#define vpl vector> +#define vpi vector> +#define msi map + +struct edge +{ + int u; + int v; + int w; +}; +edge adj[100005]; +edge adj1[200005]; +int par[100005]; +bool comp(edge u, edge v) +{ + return u.w < v.w; +} +int find(int i) +{ + if (par[i] == -1) + return i; + return par[i] = find(par[i]); +} +void set_union(int a, int b) +{ + par[b] = a; +} + +int main() +{ + int n, m, u, v, w; + cin >> n >> m; + for (int i = 1; i <= n; i++) + { + par[i] = -1; + } + for (int i = 0; i < m; i++) + { + cin >> adj[i].u >> adj[i].v >> adj[i].w; + } + sort(adj, adj + m, comp); + ll ans = 0; + for (int i = 0; i < m; i++) + { + u = find(adj[i].u); + v = find(adj[i].v); + if (u != v) + { + ans += adj[i].w; + set_union(u, v); + } + } + cout << ans << endl; +} diff --git a/C++/Sparse Table.cpp b/C++/Sparse Table.cpp new file mode 100644 index 0000000..7027885 --- /dev/null +++ b/C++/Sparse Table.cpp @@ -0,0 +1,83 @@ +//Name-Avnish Kumar +//Github id-Avnish010 +#include +using namespace std; +#define int long long int +#define mod 1000000007 + +#define fastIO \ + ios_base::sync_with_stdio(false); \ + cin.tie(NULL); \ + cout.tie(NULL) +#define endl "\n" +#define mp make_pair +#define pb push_back +#define pf push_front +#define lb lower_bound +#define ub upper_bound +#define vi vector +#define vpi vector> +#define mi map +#define msi map +#define mii map +#define spi set> +const int limit = 1e18; +const int sz = 1000005; +const int LOG = 17; +int prelog[sz]; +int st[sz][LOG]; +int query(int l, int r) // O(1) tc +{ + int len = r - l + 1; + int k = prelog[len]; + return min(st[l][k], st[r - (1 << k) + 1][k]); +} + +void solve() +{ + int n; + cin >> n; + prelog[1] = 0; + for (int i = 2; i <= n; i++) + { + prelog[i] = prelog[i / 2] + 1; + } + int a[n]; + + for (int i = 0; i < n; i++) + { + cin >> a[i]; + } + for (int i = 0; i < n; i++) + { + st[i][0] = a[i]; + } + // preprocessing st[i][k]=startin at idx= i store min of(i,i+(1<> q; + while (q--) + { + int l, r; + cin >> l >> r; + cout << query(l, r) << endl; + } +} +signed main() +{ + fastIO; + + int t = 1; + cin >> t; + while (t--) + { + solve(); + } +}