1. Drgee sum
- 2*(degree counter)
- Coming soon....
2. Handshaking lemma
- even node always get odd number of degree
- In-degree and out-degree
- Sum of indegree = sum of outdegree
4. Calculating the Complexity of Graph
- V = vertex , E = edges
- O(V+E) or O(V^2)
5. How to store Graph
- Coming soon...
6. Adjacency Matrix
include<bits/stdc++.h>
using namespace std; int g[100][100]; int main() { int n,e;cin >>n>>e; while(e--){ int u,v; cin >> u >> v; //int u,v;cin >> u << v; g[u][v]=1; g[v][u]=1; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout << g[i][j] << " "; } cout << endl; } if(g[4][2]){ cout << "YES\n"; } else cout << "NO\n"; }
6. Adjacency List
include<bits/stdc++.h>
using namespace std; const int N = 105; vector g[N]; int indgr[N],outdgr[N]; int main() { int n,e;cin >>n>>e; while(e--){ int u,v; cin >> u >> v; // finding indgree and outdgree for array
indgr[v]++; outdgr[u]++; g[u].push_back(v);
//g[v].push_back(u);
}
/* // find the list
for(auto it:g[2]){
cout << it << " ";
}
*/
// finding indgree loop
for(int i=0;i<=n;i++){
cout << indgr[i] <<" ";
}
cout << "\n";
// finding outdegree loop
for(int i=0;i<=n;i++){
cout << outdgr[i] <<" ";
}
// finding the dgree using adjcenncy list
/*
for(int i=0;i<=n;i++){
cout << g[i].size() <<" ";
}
cout << '\n';
*/}
7. DFS:
include<bits/stdc++.h>
define itsmdshahin ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
define ll long long
using namespace std; const int N= 1e5+9; bool vis[N]; vector g[N] ; void dfs(int s){ vis[s] = true; for(auto it:g[s]){ if(!vis[it]){ cout <<"VISITED "<<it << endl; dfs(it); } } } int main() { int n,m;cin>> n>>m; while(m--){ int x,y;cin>>x>>y; g[x].push_back(y); g[y].push_back(x); } int s;cin>>s; dfs(s); for(int i=1;i<=n;i++){ if(!vis[i]){ cout << "DISCONNETED GRAPH\n"; return 0; } } }
8. CONNECTED COMPONENT
include<bits/stdc++.h>
define itsmdshahin ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
define ll long long
using namespace std; const int N= 1e5+9; bool vis[N]; vector g[N] ; void dfs(int s){ vis[s] = true; for(auto it:g[s]){ if(!vis[it]){ dfs(it); } } }
int main() { int n,m;cin>> n>>m; while(m--){ int x,y;cin>>x>>y; g[x].push_back(y); g[y].push_back(x); } //int ans=0,s;cin>>s; int ans=0;
for(int i=1;i<=n;i++){ if(!vis[i]){ dfs(i); ++ans; } } cout << "Connected Compoments: " << ans << endl; }
9. BFS implement
include<bits/stdc++.h>
using namespace std;
const int N=1e5+9;
vector G[N];
bool Vis[N];
int main(){
int n,e;cin>>n>>e;
while(e--){
int x,y;cin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
queue <int> q;
q.push(1);
Vis[1]=true;
while(!q.empty()){
int u = q.front();
q.pop();
for(auto it:G[u]){
if(!Vis[it]){
q.push(it);
Vis[v]=true;
}
}
}}
10. BFS Component find Graph?
include<bits/stdc++.h>
using namespace std;
const int N=1e5+9;
vector G[N];
bool Vis[N];
queue q;
void bfs(int n){
q.push(n);
Vis[n]=true;
while(!q.empty()){
int u = q.front();
q.pop();
for(auto it:G[u]){
if(!Vis[it]){
q.push(it);
Vis[it]=true;
}
}
}}
int main(){
int n,e;cin>>n>>e;
while(e--){
int x,y;cin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
int ans=0;
for(int i=0;i<n;i++){
if(!Vis[i]){
bfs(i);
++ans;
}
}
cout << ans << endl;}
- BFS Distance find Graph Theory?
include<bits/stdc++.h>
using namespace std;
const int N=1e5+9;
vector G[N];
bool Vis[N];
vector dis(N);
int main(){
int n,e;cin>>n>>e;
while(e--){
int x,y;cin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
queue <int> q;
q.push(1);
Vis[1]=true;
dis[1]=0;
while(!q.empty()){
int u = q.front();
q.pop();
for(auto it:G[u]){
if(!Vis[it]){
q.push(it);
dis[it] = dis[u]+1;
Vis[it]=true;
}
}
}
for(int i=1;i<=n;i++){
cout << dis[i] << " ";
}
cout << endl;}
12 BFS Path find Graph Theory? ------------------------------
Coming soon....
13 Bicoloring and Bipartite Graph ---------------------------------
include<bits/stdc++.h>
using namespace std;
const int N = 105;
vector g[N];
int indgr[N],outdgr[N];
bool vis[N],col[N],ok;
void dfs(int u)
{
vis[u]=true;
for(auto v:g[u])
{
if(!vis[v])
{
col[v] = col[u]^1;
dfs(v);
}
else
{
if(col[u]==col[v])ok=false;
}
}}
int main()
{
int n,e;
cin >>n>>e;
while(e--)
{
int u,v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
ok = true;
for(int i=1; i<=n; i++)
{
if(!vis[i])dfs(i);
}
if(ok)
{
cout << "YES\n";
}
else cout << "NO\n";}



