#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node
{
int to,next;
}a[500011];//链式向前星
int n,m,ou[500011],an[500011],h[500011],in[500011],i,j,x,y;
int dfs(int s)//dfs深搜
{
if(ou[s]==0)
{
an[s]=1;
return 1;
}
if(an[s]) return an[s];//重点
int sum=0;
for(int j=h[s];j!=0;j=a[j].next)
sum=max(sum,dfs(a[j].to));
an[s]=sum+1;
return an[s];
}
int main()
{
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>x>>y;//反向建边
a[i].to=x;
a[i].next=h[y];
h[y]=i;//以上三行为模板
ou[y]++;
}
for(i=1;i<=n;i++)
dfs(i);
for(i=1;i<=n;i++)
cout<<an[i]<<endl;
return 0;
}
/*泛舟沧海,立马昆仑*/
/*若你为了错过太阳而哭泣,那么你也将错过群星了*/
/*红了樱桃,绿了芭蕉*/
P1137 旅行计划--拓扑排序+贪心
最新推荐文章于 2024-07-12 18:56:03 发布
本文介绍了一个使用C++编写的程序,实现链式向前星图结构,并利用深度优先搜索(DFS)算法计算每个节点的连通数。输入n和m构建图后,对所有节点进行DFS遍历,输出每个节点的连通分量大小。
摘要由CSDN通过智能技术生成