poj 2762 tarjan缩点+拓扑序
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缩点+拓扑序的更多相关文章
- POJ 2762 tarjan缩点+并查集+度数
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15494 ...
- poj 2762 强连通缩点+拓扑排序
这题搞了好久,先是拓扑排序这里没想到,一开始自己傻乎乎的跑去找每层出度为1的点,然后才想到能用拓扑排序来弄. 拓扑排序的时候也弄了挺久的,拓扑排序用的也不多. 题意:给一个图求是否从对于任意两个点能从 ...
- POJ 2672 Tarjan + 缩点 + 拓扑思想
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17383 ...
- poj 2762(tarjan缩点+判断是否是单链)
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19234 ...
- UVA 11324.The Largest Clique tarjan缩点+拓扑dp
题目链接:https://vjudge.net/problem/UVA-11324 题意:求一个有向图中结点数最大的结点集,使得该结点集中任意两个结点u和v满足:要目u可以到达v,要么v可以到达u(相 ...
- [HAOI2006]受欢迎的牛 tarjan缩点 + 拓扑排序
---题面--- 题解: 首先tarjan缩点应该还是容易想到的,因为喜爱具有传递性,所以一个强联通分量里面的点实际上是全部等效的,所以我们可以缩成一个方便判断, 缩完点之后整张图就变成了一个有向无环 ...
- HDU 6165 FFF at Valentine(Tarjan缩点+拓扑排序)
FFF at Valentine Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- [ZJOI2007]最大半连通子图 (Tarjan缩点,拓扑排序,DP)
题目链接 Solution 大概是个裸题. 可以考虑到,如果原图是一个有向无环图,那么其最大半联通子图就是最长的一条路. 于是直接 \(Tarjan\) 缩完点之后跑拓扑序 DP就好了. 同时由于是拓 ...
- [模板]tarjan缩点+拓扑排序
题目:给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 题目简述:先t ...
随机推荐
- php缓存技术——memcache常用函数详解
php缓存技术——memcache常用函数详解 2016-04-07 aileen PHP编程 Memcache函数库是在PECL(PHP Extension Community Library)中, ...
- phpcms V9如何判断用户是否登录以及登陆后的标签写法问题
首先要获取userid {php$userid=param::get_cookie('_userid');} 然后再判断是否为空 {if $userid}...这里写已经登录之后的代码...{els ...
- MongoDb企业应用实战(一) 写在MongoDB应用介绍之前(ii)
上一篇: MongoDb企业应用实战(一) 写在MongoDB应用介绍之前(i) 有段时间没跟大家去分享和探讨过一些问题,分享过一些经验了(失败过的,痛苦过的才最有看点啊,不知道各位同仁们怎么去看这个 ...
- 第28天:js-Tab栏切换封装函数
一.input.value所有值都是string 二.变量和属性var index=10;//变量var arr=[];//数组arr.index=20;//index为自定义属性,只能在arr下使用 ...
- nargchk函数 matlab【转】
功能说明 验证输入参数的个数 函数语法 msgstring = nargchk(minargs, maxargs, numargs)msgstring = nargchk(minargs, max ...
- 【bzoj4579】[Usaco2016 Open]Closing the Farm 并查集
题目描述 Farmer John and his cows are planning to leave town for a long vacation, and so FJ wants to tem ...
- [LOJ2538] [PKUWC2018] Slay the Spire
题目链接 LOJ:https://loj.ac/problem/2538 Solution 计数好题. 首先可以发现这题和期望没关系. 其次对于手上的一套牌,设我们有\(a\)张强化牌,那么: 如果\ ...
- BZOJ1877:[SDOI2009]晨跑——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1877 https://www.luogu.org/problemnew/show/P2153 Ela ...
- Java实验报告(实验四)
北京电子科技学院(BESTI) 实 验 报 告 课程:Java 班级:1352班 姓名:王国伊 学号:20135207 成绩: 指导 ...
- ES6箭头函数总结
1. 箭头函数基本形式 let func = (num) => num; let func = () => num; let sum = (num1,num2) => num1 + ...