#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;
}
Tuesday, November 28, 2023
C++ CP cheatsheet
Labels:
C++
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment