Tuesday, November 28, 2023

C++ CP cheatsheet

#include <iostream>

#include <vector>

#include <queue>

#include <stack>

#include <algorithm>

#include <cmath>

using namespace std;


// Input/Output

#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

#define read(x) cin >> x

#define write(x) cout << x << endl


// Data types

#define int long long

#define vi vector<int>

#define pb push_back

#define mp make_pair

#define pii pair<int, int>


// Loops

#define loop(i, a, b) for (int i = a; i < b; i++)

#define rloop(i, a, b) for (int i = a; i >= b; i--)


// Sorting

#define sortv(v) sort(v.begin(), v.end())

#define sortvr(v) sort(v.rbegin(), v.rend())


// Vector manipulation

#define all(v) v.begin(), v.end()

#define uniquev(v) v.erase(unique(v.begin(), v.end()), v.end())


// Map and Set

#define umap unordered_map

#define uset unordered_set


// Math

#define INF LLONG_MAX

#define MOD 1000000007

#define gcd(a, b) __gcd(a, b)

#define lcm(a, b) (a * b) / gcd(a, b)


// Binary Search

#define lb lower_bound

#define ub upper_bound


// Graph

#define graph vector<vi>

#define addEdge(g, u, v) g[u].pb(v); g[v].pb(u)


// DFS and BFS

void dfs(graph &g, vi &visited, int u) {

    visited[u] = 1;

    for (int v : g[u]) {

        if (!visited[v]) {

            dfs(g, visited, v);

        }

    }

}


void bfs(graph &g, vi &visited, int start) {

    queue<int> q;

    q.push(start);

    visited[start] = 1;


    while (!q.empty()) {

        int u = q.front();

        q.pop();


        for (int v : g[u]) {

            if (!visited[v]) {

                visited[v] = 1;

                q.push(v);

            }

        }

    }

}


// Dijkstra's Algorithm

vi dijkstra(graph &g, int start) {

    int n = g.size();

    vi dist(n, INF);

    priority_queue<pii, vector<pii>, greater<pii>> pq;


    dist[start] = 0;

    pq.push({0, start});


    while (!pq.empty()) {

        int u = pq.top().second;

        int d = pq.top().first;

        pq.pop();


        if (d > dist[u]) continue;


        for (int v : g[u]) {

            if (dist[u] + 1 < dist[v]) {

                dist[v] = dist[u] + 1;

                pq.push({dist[v], v});

            }

        }

    }


    return dist;

}


int main() {

    fastio;


    // Your code here


    return 0;

}


No comments:

Post a Comment