#include<bits/stdc++.h>
using namespace std;
#define MX 1110000
long node,edge,vis[MX];
vector<long>vec[MX];
vector<long>vec1;
void dfs(long u)
{
long j;
vis[u] = true;
for(j=0;j<vec[u].size();j++)
{
long v = vec[u][j];
if(vis[v]==0)
{
dfs(v);
}
}
vec1.push_back(u);
}
int main()
{
long ts;
cin>>ts;
while(ts--)
{
long a,b,i,cnt=0,x;
cin>>node>>edge;
for(i=1;i<=edge;i++)
{
cin>>a>>b;
vec[a].push_back(b);
}
memset(vis,0,sizeof(vis));
for(i=1;i<=node;i++)
{
if(vis[i]==0)
{
dfs(i);
}
}
memset(vis,0,sizeof(vis));
x=vec1.size()-1;
for(i=x;i>=0;i--)
{
if(vis[vec1[i]]==0)
{
dfs(vec1[i]);
cnt++;
}
}
cout<<cnt<<endl;
vec1.clear();
for(i=0;i<MX;i++)
{
vec[i].clear();
}
}
return 0;
}
using namespace std;
#define MX 1110000
long node,edge,vis[MX];
vector<long>vec[MX];
vector<long>vec1;
void dfs(long u)
{
long j;
vis[u] = true;
for(j=0;j<vec[u].size();j++)
{
long v = vec[u][j];
if(vis[v]==0)
{
dfs(v);
}
}
vec1.push_back(u);
}
int main()
{
long ts;
cin>>ts;
while(ts--)
{
long a,b,i,cnt=0,x;
cin>>node>>edge;
for(i=1;i<=edge;i++)
{
cin>>a>>b;
vec[a].push_back(b);
}
memset(vis,0,sizeof(vis));
for(i=1;i<=node;i++)
{
if(vis[i]==0)
{
dfs(i);
}
}
memset(vis,0,sizeof(vis));
x=vec1.size()-1;
for(i=x;i>=0;i--)
{
if(vis[vec1[i]]==0)
{
dfs(vec1[i]);
cnt++;
}
}
cout<<cnt<<endl;
vec1.clear();
for(i=0;i<MX;i++)
{
vec[i].clear();
}
}
return 0;
}
কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন