diff --git a/Graph Algorithms/Strongly Connected Component.cpp b/Graph Algorithms/Strongly Connected Component.cpp new file mode 100644 index 0000000..e7b9d37 --- /dev/null +++ b/Graph Algorithms/Strongly Connected Component.cpp @@ -0,0 +1,54 @@ +//(Detection of Directed Cycle in a connected component): http://codeforces.com/contest/505/problem/D +vector g[N], newg[N], rg[N], todo; +int comp[N], indeg[N]; +bool vis[N]; +vector gr[N]; + +void dfs(int k) +{ + vis[k]=1; + for(auto it:g[k]) + { + if(!vis[it]) + dfs(it); + } + todo.push_back(k); +} + +void dfs2(int k, int val) +{ + comp[k]=val; + for(auto it:rg[k]) + { + if(comp[it]==-1) + dfs2(it, val); + } +} + +void sccAddEdge(int from, int to) +{ + g[from].push_back(to); + rg[to].push_back(from); +} + +void scc() +{ + for(int i=1;i<=n;i++) + comp[i]=-1; + + for(int i=1;i<=n;i++) + { + if(!vis[i]) + dfs(i); + } + + reverse(todo.begin(), todo.end()); + + for(auto it:todo) + { + if(comp[it]==-1) + { + dfs2(it, ++grp); + } + } +} \ No newline at end of file diff --git a/Recursion, Backtracking etc/K-Combinations.cpp b/Recursion, Backtracking etc/K-Combinations.cpp new file mode 100644 index 0000000..8038234 --- /dev/null +++ b/Recursion, Backtracking etc/K-Combinations.cpp @@ -0,0 +1,54 @@ +/* + Petar 'PetarV' Velickovic + Algorithm: K-Combinations +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef long long lld; + +int n, k; +int skup[100]; +bool inSet[100]; + +//Program koji generise sve kombinacije od po K elemenata datog skupa +//Slozenost: O((n choose k)) + +void kCombinations(int pos, int amt) +{ + if (n-pos +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef long long lld; + +int n; +int niz[100]; +bool inPerm[100]; +int currPerm[100]; + +//Algoritam koji generise sve permutacije datog niza +//Slozenost: O(n!) + +void generatePermutations(int pos) +{ + if (pos == n) + { + for (int i=0;i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef long long lld; + +//Metoda koja generise partitivni skup nekog skupa +//Slozenost: O(2^n) + +int n; +int skup[100]; +bool inSet[100]; + +void powerSet(int pos) +{ + if (pos==n) + { + for (int i=0;i