2013-09-08 10:00

var
m, n :longint;
t :longint;
f, last :array[..] of longint;
pre, other :array[..] of longint;
l, time :longint;
dfn, low :array[..] of longint;
tot :longint;
stack :array[..] of longint;
flag, fs :array[..] of boolean;
i :longint;
key :array[..] of longint;
kk :longint;
que :array[..] of longint;
count :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;
f[y]:=x;
end; procedure init;
var
i :longint;
x, y :longint;
begin
read(n,m);
for i:= to m do
begin
read(x,y);
connect(x,y);
end;
end; procedure dfs(x:longint);
var
p, q, cur :longint;
begin
inc(time);
dfn[x]:=time;
low[x]:=time;
inc(tot);
stack[tot]:=x;
fs[x]:=true;
flag[x]:=true;
q:=last[x];
while q<> do
begin
p:=other[q];
if p<>x then
begin
if not flag[p] then
begin
dfs(p);
low[x]:=min(low[x],low[p]);
end else
if fs[p] then
begin
low[x]:=min(low[x],dfn[p]);
end;
end;
q:=pre[q];
end;
p:=-;
if low[x]=dfn[x] then
begin
inc(kk);
while p<>x do
begin
p:=stack[tot];
fs[p]:=false;
key[p]:=kk;
dec(tot);
inc(count);
end;
end; end; function bfs(x:longint):boolean;
var
i :longint;
t, h, p, q :longint;
cur :longint;
d :array[..] of longint; begin
fillchar(flag,sizeof(flag),);
fillchar(d,sizeof(d),);
h:=; t:=;
que[]:=x;
d[x]:=;
while h<t do
begin
inc(h);
cur:=que[h];
q:=last[cur];
while q<> do
begin
p:=other[q];
inc(t);
que[t]:=p;
d[p]:=d[cur]+;
q:=pre[q];
end;
end;
if d[que[t]]=kk-n then exit(true) else exit(false);
end; procedure main;
var
i :longint;
x :longint;
q, p :longint;
begin
l:=;
fillchar(last,sizeof(last),);
time:=;
fillchar(f,sizeof(f),);
fillchar(low,sizeof(low),);
fillchar(dfn,sizeof(dfn),);
fillchar(flag,sizeof(flag),false);
fillchar(stack,sizeof(stack),);
tot:=;
fillchar(fs,sizeof(fs),false);
fillchar(key,sizeof(key),);
count:=;
init;
x:=;
kk:=n;
for i:= to n do
if (f[i]=) then
begin
if x<> then
begin
writeln('No');
exit;
end;
x:=i;
end;
if x= then x:=;
dfs(x); if count<>n then
begin
writeln('No');
exit;
end; for i:= to n do
begin
q:=last[i];
while q<> do
begin
p:=other[q];
if key[i]<>key[p] then connect(key[i],key[p]);
q:=pre[q];
end;
end;
x:=;
for i:=n+ to kk do
begin
if f[i]= then
begin
if x<> then
begin
writeln('No');
exit;
end;
x:=i;
end;
end; if x= then x:=;
if bfs(x) then writeln('Yes') else writeln('No');
end; begin
read(t);
for i:= to t do main;
end.

poj 2762 tarjan缩点+拓扑序的更多相关文章

  1. POJ 2762 tarjan缩点+并查集+度数

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15494 ...

  2. poj 2762 强连通缩点+拓扑排序

    这题搞了好久,先是拓扑排序这里没想到,一开始自己傻乎乎的跑去找每层出度为1的点,然后才想到能用拓扑排序来弄. 拓扑排序的时候也弄了挺久的,拓扑排序用的也不多. 题意:给一个图求是否从对于任意两个点能从 ...

  3. POJ 2672 Tarjan + 缩点 + 拓扑思想

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17383 ...

  4. poj 2762(tarjan缩点+判断是否是单链)

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19234 ...

  5. UVA 11324.The Largest Clique tarjan缩点+拓扑dp

    题目链接:https://vjudge.net/problem/UVA-11324 题意:求一个有向图中结点数最大的结点集,使得该结点集中任意两个结点u和v满足:要目u可以到达v,要么v可以到达u(相 ...

  6. [HAOI2006]受欢迎的牛 tarjan缩点 + 拓扑排序

    ---题面--- 题解: 首先tarjan缩点应该还是容易想到的,因为喜爱具有传递性,所以一个强联通分量里面的点实际上是全部等效的,所以我们可以缩成一个方便判断, 缩完点之后整张图就变成了一个有向无环 ...

  7. HDU 6165 FFF at Valentine(Tarjan缩点+拓扑排序)

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. [ZJOI2007]最大半连通子图 (Tarjan缩点,拓扑排序,DP)

    题目链接 Solution 大概是个裸题. 可以考虑到,如果原图是一个有向无环图,那么其最大半联通子图就是最长的一条路. 于是直接 \(Tarjan\) 缩完点之后跑拓扑序 DP就好了. 同时由于是拓 ...

  9. [模板]tarjan缩点+拓扑排序

    题目:给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 题目简述:先t ...

随机推荐

  1. 3dContactPointAnnotationTool开发日志(十)

      要是那几个状态栏不能拖动的话岂不是显得太呆板了,于是我又参考Unity官方视频教程学习了如何实现拖动状态栏的功能,还挺简单的.   比如说要拖动这个PanelStatus面板,我只让使用者通过拖动 ...

  2. 异常--throw

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. .NET中SQL Server数据库连接方法

    1. 使用本机上的SQL Server Express 实例上的用户实例.       用户实例的连接创建了一个新的SQL Server 实例.此连接只能是在本地SQL Server 2005实例上并 ...

  4. 将下载到本地的JAR包手动添加到Maven仓库(转)

    常用Maven仓库网址:http://mvnrepository.com/http://search.maven.org/http://repository.sonatype.org/content/ ...

  5. C语言指针【转】

    一.C语言指针的概念 在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细 ...

  6. 2018 杭电多校1 - Chiaki Sequence Revisited

    题目链接 Problem Description Chiaki is interested in an infinite sequence $$$a_1,a_2,a_3,...,$$$ which i ...

  7. Socket_FTP

    1. md5加密回顾: import hashlib m=hashlib.md5() #创建md5对象 m.update(b'abcd') #生成加密串 m.update(b'efg') print( ...

  8. [ZJOI2010]数字计数 数位DP

    最近在写DP,今天把最近写的都放上来好了,,, 题意:给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 首先询问的是一个区间,显然是要分别求出1 ~ r ,1 ...

  9. 【CodeChef】Palindromeness(回文树)

    [CodeChef]Palindromeness(回文树) 题面 Vjudge CodeChef 中文版题面 题解 构建回文树,现在的问题就是要求出当前回文串节点的长度的一半的那个回文串所代表的节点 ...

  10. Codeforces 864E Fire(背包DP)

    背包DP,决策的时候记一下 jc[i][j]=1 表示第i个物品容量为j的时候要选,输出方案的时候倒推就好了 #include<iostream> #include<cstdlib& ...