Skip to main content

Finding the mother node of a graph

#include<bits/stdc++.h>
using namespace std;
class graph
{
    int v;
    list<int> *adj;
public:
    graph(int v)
    {
        this->v=v;
        adj=new list<int>[v];
    }
    void add_edge(int v,int w)
    {
        adj[v].push_back(w);
    }
    void dfs(int start,bool visited[]);
    int find_mother();
};
void graph::dfs(int start,bool visited[])
{
    visited[start]=true;
    for(auto itr=adj[start].begin();itr!=adj[start].end();itr++)
    {
        if(!visited[*itr])
        {
            dfs(*itr,visited);
        }
    }
}
int graph::find_mother()
{
    bool *visited=new bool[v];
    for(int i=0;i<v;i++)
        visited[i]=false;
    int m=0;
    for(int i=0;i<v;i++)
    {
        if(visited[i]==false)
        {
            dfs(i,visited);
            m=i;
        }
    }
    for(int i=0;i<v;i++)
        visited[i]=false;
    dfs(m,visited);
    for(int i=0;i<v;i++)
    {
        if(visited[i]==false)
            return -1;
    }
    return m;
}
int main()
{
    graph g(5);
    g.add_edge(0,1);
    g.add_edge(0,2);
    g.add_edge(1,2);
    g.add_edge(2,3);
    g.add_edge(2,0);
    cout<<g.find_mother()<<endl;
    return 0;
}

Comments

Popular posts from this blog

Codeforces-Dubstep solution

#include < bits / stdc ++. h > using namespace std ; int main () { string str ; getline ( cin , str ); int index = str . find ( "WUB" ); int count = 0 ; while ( index !=- 1 ) { str . replace ( index , 3 , " " ); //str.erase(str.begin()+index,str.begin()+index+3); index = str . find ( "WUB" ); } cout << str ; return 0 ; }

Jee Main Experience

April 8th, the day for which I worked hard for 3 years finally came. I woke up early and revised chemistry for 2 hrs and solved 2–3 math problems. That's all I have done in the morning. I reached the exam centre. It was already filled with many students and anxious parents. Some students were calm. I found one guy still solving his coaching material. I was shocked. I tried to calm myself. I went into the hall. I sat in my place. I spent an hour and half sitting idle. Now the real story begins. The omr and the paper were supposed to be given at 9:15. We didn't get. 9:20 still we didn't get. 9:25 we got. Ok I started filling the details. All those formalities were done by 9:50. I'm not joking. This was the exact time. By then I thought I'm done for nothing. I started math. I solved the first question. I got it. It gave me some confidence. I started doing the other questions. They were lengthy. I started feeling uncomfortable. I randomly switched to ph...

codeforces-Anton and Danik

#include < bits / stdc ++. h > using namespace std ; int main () { long n ; string str ; cin >> n ; cin >> str ; long count = 0 , index ; index = str . find ( "A" ); while ( index !=- 1 ) { count ++; str . erase ( str . begin ()+ index , str . begin ()+ index + 1 ); index = str . find ( "A" ); } if ( count > n - count ) cout << "Anton" ; else if ( count < n - count ) cout << "Danik" ; else cout << "Friendship" ; return 0 ; }