我的想法是反向建边+BFS+并查集。
#include<iostream>
#include<cstdio>
#include<deque>
int u,v,n,m,dian[int(1e5+1)];
std::deque<std::deque<int> > bian;
int main()
{
scanf("%d %d",&n,&m);
bian.resize(n+1);
for(int i=0;i<m;++i)
{
scanf("%d %d",&u,&v);
bian[v].push_back(u);
}
for(int i=1;i<=n;++i)
dian[i]=i;
for(int i=n;i>0;--i)
{
for(auto c:bian[i])
{
if(dian[c]<dian[i])
dian[c]=dian[i];
}
}
for(int i=1;i<=n;++i)
printf("%d ",dian[i]);
}
哪位大佬能指点一下?愚倍受恩感激。