2013-11-16 11:39

原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1051

强连通分量,缩完点之后看出度为0的强连通分量有几个,如果只有一个则输出该强连通分量的点数,否则输出0;

/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
var
n, m :longint;
pre, other :array[..] of longint;
last :array[..] of longint;
l :longint;
flag :array[..] of boolean;
dfn, low :array[..] of longint;
time :longint;
tot :longint;
stack :array[..] of longint;
key :array[..] of longint;
size :array[..] of longint;
full :longint;
father :array[..] of longint; function min(a,b:longint):longint;
begin
if a>b then min:=b else min:=a;
end; procedure connect(x,y:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
end; procedure init;
var
i :longint;
x, y :longint;
begin
read(n,m);
for i:= to m do
begin
read(x,y);
connect(y,x);
end;
end; procedure dfs(x:longint);
var
q, p :longint;
cur :longint;
begin
inc(time);
dfn[x]:=time;
low[x]:=time;
flag[x]:=true;
inc(tot);
stack[tot]:=x; q:=last[x];
while q<> do
begin
p:=other[q];
if dfn[p]= then
begin
dfs(p);
low[x]:=min(low[x],low[p]);
end else
if flag[p] then low[x]:=min(low[x],dfn[p]);
q:=pre[q];
end; cur:=-;
if dfn[x]=low[x] then
begin
while cur<>x do
begin
cur:=stack[tot];
dec(tot);
flag[cur]:=false;
key[cur]:=x+n;
inc(size[key[cur]]);
end;
end;
end; procedure main;
var
i :longint;
q, p :longint;
begin
for i:= to n do if dfn[i]= then dfs(i);
for i:= to n do
begin
q:=last[i];
while q<> do
begin
p:=other[q];
if key[i]<>key[p] then
begin
connect(key[i],key[p]);
father[key[p]]:=key[i];
end;
q:=pre[q];
end;
end;
full:=-;
for i:= to n do
begin
if (father[key[i]]=) and (full=-) then full:=key[i];
if (father[key[i]]=) and (full<>-) and (full<>key[i]) then
begin
writeln();
exit;
end;
end;
writeln(size[full]);
end; begin
init;
main;
end.

最新文章

  1. 关于python字符串连接的操作
  2. 一款公用的CSS+DIV弹窗
  3. 在windows下面配置redis集群遇到的一些坑
  4. Yii2提交表单提示无法验证
  5. iOS7隐藏顶部状态栏
  6. WebDriver - 添加失败截图
  7. [转]连续创建多个Oracle触发器失败,单个创建才成功的解决方法
  8. netty websocket协议开发
  9. Java作业代写
  10. VLD(Visual LeakDetector)内存泄露库的使用
  11. 开发自己PHP MVC框架(一)
  12. bitcode 关于讯飞
  13. Toolbar Painter 工具条制作
  14. 多线程爬坑之路-J.U.C.atomic包下的AtomicInteger,AtomicLong等类的源码解析
  15. JS——操作内容、操作相关元素
  16. Nancy 自寄宿
  17. springMVC学习之路4-最后的征程:整合hibernate
  18. DSP2812&#160; 启动详解
  19. [翻译] FastReport TfrxReport组件使用
  20. wpf数据绑定:xml数据绑定

热门文章

  1. OpenCV入门:(一:安装与配置)
  2. 在 Ubuntu 16.04 LTS 上安装 Python 3.6.0
  3. 自动化测试学习之路--java String、StringBuilder
  4. LuffyCity-CMDB实战
  5. 怎么用Q-Q图验证数据集的分布
  6. python基础训练营06
  7. c++知识点总结--函数模板
  8. DP入门(2)——DAG上的动态规划
  9. week12第二轮迭代任务分配forZ.XML
  10. html5实现web app摇一摇换歌