#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> grafo;
vector<bool> vis;
int cont=0;
int n,q;
void dfs(int nodo)
{
if(!vis[nodo]){
//vis[nodo]=true;
for(int i=0;i<grafo[nodo].size();i++)
{
if(grafo[nodo][i+1]<=n) {
for(int j=i+1;j<grafo[nodo].size();j++){
if(grafo[nodo][i]<grafo[nodo][j]&&find(grafo[grafo[nodo][i]].begin(),grafo[grafo[nodo][i]].end(),grafo[nodo][j])==grafo[grafo[nodo][i]].end()){
grafo[grafo[nodo][i]].push_back(grafo[nodo][j]);
cont++;
}}
dfs(grafo[nodo][i]);
}
}
}
}
void solve(){
int a,b;
cin>>n>>q;
grafo.assign(n+1,vector<int> ());
vis.assign(n+1,false);
while(q--)
{
cin>>a>>b;
grafo[a].push_back(b);
cont++;
}
for(int i=1;i<=n;i++)
{
sort(grafo[i].begin(),grafo[i].end());
if(!vis[i]) dfs(i),vis[i]=true;
}
cout<<cont;
}
int main()
{
solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |