Cod sursa(job #896405)

Utilizator michael9ufoStanescu Mihai michael9ufo Data 27 februarie 2013 15:32:22
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstring>
#include <cstring>

using namespace std;

long long N, M, A, B, i, j;

vector<int> V[10010];

int DIST[10010];

void solve(int S)
{
int i;
    queue<int> Q;

    Q.push(S);

for(i=1;i<=N;++i)
    DIST[i] = -1;
    DIST[S] = 0;

    while(!Q.empty())
    {

        int now = Q.front();

        for(vector<int>::iterator it=V[now].begin();it!=V[now].end();++it)
        {

            if(DIST[*it] == -1)
            {
                DIST[*it] = DIST[now] + 1;

                Q.push(*it);
            }
        }

        Q.pop();

    }

}

int main()
{

    freopen("dfs.in", "r", stdin);
    freopen("dfs.out", "w", stdout);

    cin>>N>>M;

    for(i=1;i<=M;++i)
    {
        int A, B;
        scanf("%d %d", &A, &B);
        V[A].push_back(B);
    }
int rez = 0;

    for(i=1;i<=N;++i)
    {

        solve(i);

        for(j=i;j<N;++j)
            if(DIST[j+1] != -1)
                ++rez;

    }

    cout<<rez<<"\n";
    return 0;
}