Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions C++/Kosaraju's algorithm.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
//Name-Avnish Kumar
//Github id-Avnish010
#include <bits/stdc++.h>
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<int>
#define vvl vector<vector<long>>
#define vl vector<ll>
#define vpl vector<pair<ll, ll>>
#define vpi vector<pair<int, int>>
#define msi map<string, int>
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;
}
}
}
}
76 changes: 76 additions & 0 deletions C++/Kruskal Algorithm.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
//Name-Avnish Kumar
//Github id-Avnish010
#include <bits/stdc++.h>
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<int>
#define vvl vector<vector<long>>
#define vl vector<ll>
#define vpl vector<pair<ll, ll>>
#define vpi vector<pair<int, int>>
#define msi map<string, int>

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;
}
83 changes: 83 additions & 0 deletions C++/Sparse Table.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
//Name-Avnish Kumar
//Github id-Avnish010
#include <bits/stdc++.h>
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<int>
#define vpi vector<pair<int, int>>
#define mi map<int>
#define msi map<string, int>
#define mii map<int, int>
#define spi set<pair<int, int>>
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<<k))
// tc =nlog(n)
for (int k = 1; k < LOG; k++)
{
for (int i = 0; i + (1 << k) - 1 < n; i++)
{
st[i][k] = min(st[i][k - 1], st[i + (1 << (k - 1))][k - 1]);
}
}
int q;
cin >> 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();
}
}