#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
const int maxn=;
vector<int>tu[maxn];
vector<int>lt[maxn];
int n,m,lts=;
int js=;
int dfn[maxn],low[maxn];
int zhan[maxn],top=;
bool isins[maxn];
void tarjan(int i)
{
int j;
dfn[i]=low[i]=++js;
isins[i]=;
zhan[top++]=i;
for(int j=;j<tu[i].size();j++)
{
int tp=tu[i][j];
if(dfn[tp]==-)
tarjan(tp),
low[i]=min(low[i],low[tp]);
else if(isins[tp])
low[i]=min(low[i],dfn[tp]);
}
if(dfn[i]==low[i])
{
lts++;
do{
j=zhan[--top];
isins[j]=;
lt[lts].push_back(j);
}while(i!=j);
}
}
void solve(int n)
{
memset(dfn,-,sizeof dfn);
memset(low,-,sizeof low);
memset(zhan,-,sizeof zhan);
memset(isins,,sizeof isins);
for(int i=;i<n;i++)
if(dfn[i]==-)
tarjan(i);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
tu[x].push_back(y);
}
solve(n);
for(int i=;i<=lts;i++)
{
cout<<i<<":";
for(int j=;j<lt[i].size();j++)
cout<<lt[i][j]<<" ";
cout<<endl;
}
return ;
}

最新文章

  1. Mysql编码, Mysql编码流程, Mysql编码顺序, Mysql编码原理, Mysql编码修改依据
  2. 微软职位内部推荐-SDE2 (Windows driver)
  3. 【转】自定义垂直的UISlider
  4. jQuery的延迟对象
  5. poj 2240 Arbitrage (Floyd)
  6. SLC和MLC闪存芯片的区别
  7. 第一次点击button, view视图出现;第二次点击button,view视图消失
  8. 被非技术瓶颈阻挡了,没钱买Mac,挣扎ing
  9. 【java图形计算器】 java awt swing组件应用
  10. ssh_maven的搭建之dao层的开发
  11. VirtualBox 局域网独立主机设置
  12. 6、echarts使用的坑
  13. Simple scatter method in 2d picture(Qt)
  14. D. Boxes Packing
  15. 高性能JavaScript(数据存取)
  16. Java微信二次开发(一)
  17. [转载]DB2与ORACLE、MYSQL比较2
  18. java 多线程 30: 多线程组件之 CyclicBarrier
  19. pyqt重写键盘事件+获取信号发送对象
  20. layDay日期格式不合法报错解决

热门文章

  1. Python开发【前端】:HTML
  2. 简单的js菜单
  3. centos7最小安装后常常需要添加的命令
  4. ios开发证书
  5. EF实体框架之CodeFirst一
  6. SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色 SP2-0611: 启用 STATISTICS 报告时出错
  7. uva 147 Dollars
  8. 显示textarea内容的时候没有自动换行
  9. NLog输出目标及类型
  10. Buge&#39;s Fibonacci Number Problem