首先缩点
然后半连通其实就是缩点后节点数最多的链
注意这里一定是一条链才一定是半连通
然后重建图拓扑排序上做dp即可

 type node=record
po,next:longint;
end; var w,e:array[..] of node;
rd,be,c,f,g,p,q,st,dfn,low:array[..] of longint;
v:array[..] of boolean;
s,mo,i,n,m,x,y,j,h,t,ans1,ans2,len:longint; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; procedure fadd(x,y:longint);
begin
inc(len);
w[len].po:=y;
w[len].next:=q[x];
q[x]:=len;
end; procedure add(x,y:longint);
begin
inc(len);
e[len].po:=y;
e[len].next:=p[x];
p[x]:=len;
end; procedure tarjan(x:longint);
var i,y:longint;
begin
inc(h);
dfn[x]:=h;
low[x]:=h;
inc(t);
st[t]:=x;
v[x]:=true;
i:=p[x];
while i<> do
begin
y:=e[i].po;
if dfn[y]= then
begin
tarjan(y);
low[x]:=min(low[x],low[y]);
end
else if v[y] then low[x]:=min(low[x],low[y]);
i:=e[i].next;
end;
if dfn[x]=low[x] then
begin
inc(s);
while st[t+]<>x do
begin
y:=st[t];
v[y]:=false;
inc(c[s]);
be[y]:=s;
dec(t);
end;
end;
end; begin
readln(n,m,mo);
for i:= to m do
begin
readln(x,y);
add(x,y);
end;
for i:= to n do
if dfn[i]= then
begin
h:=;
t:=;
tarjan(i);
end; len:=;
for i:= to n do
begin
j:=p[i];
while j<> do
begin
y:=e[j].po;
if be[y]<>be[i] then
begin
fadd(be[i],be[y]);
inc(rd[be[y]]);
end;
j:=e[j].next;
end;
end;
t:=;
for i:= to s do
if rd[i]= then
begin
inc(t);
st[t]:=i;
f[i]:=c[i];
g[i]:=;
end;
h:=;
fillchar(low,sizeof(low),);
while h<=t do
begin
x:=st[h];
i:=q[x];
while i<> do
begin
y:=w[i].po;
dec(rd[y]);
if rd[y]= then
begin
inc(t);
st[t]:=y;
end;
if low[y]<>x then
begin
low[y]:=x;
if f[y]<f[x]+c[y] then
begin
f[y]:=f[x]+c[y];
g[y]:=g[x];
end
else if f[y]=f[x]+c[y] then g[y]:=(g[y]+g[x]) mod mo;
end;
i:=w[i].next;
end;
inc(h);
end;
ans1:=;
ans2:=;
for i:= to s do
if f[i]>ans1 then
begin
ans1:=f[i];
ans2:=g[i];
end
else if f[i]=ans1 then ans2:=(ans2+g[i]) mod mo;
writeln(ans1);
writeln(ans2);
end.

bzoj1093的更多相关文章

  1. BZOJ1093 ZJOI2007最大半连通子图(缩点+dp)

    发现所谓半连通子图就是缩点后的一条链之后就是个模板题了.注意缩点后的重边.写了1h+真是没什么救了. #include<iostream> #include<cstdio> # ...

  2. 【BZOJ1093】[ZJOI2007]最大半联通子图(Tarjan,动态规划)

    [BZOJ1093][ZJOI2007]最大半联通子图(Tarjan,动态规划) 题面 BZOJ 洛谷 洛谷的讨论里面有一个好看得多的题面 题解 显然强连通分量对于题目是没有任何影响的,直接缩点就好了 ...

  3. LG2272/BZOJ1093 「ZJOI2007」最大半连通子图 Tarjan缩点+DAG求最长链

    问题描述 LG2272 BZOJ1093 题解 观察半联通的定义,发现图中的一些结点,构成的链一定是一个半联通子图. 此时存在的环可能会干扰求解,于是\(\mathrm{Tarjan}\)缩点. 于是 ...

  4. BZOJ1093 [ZJOI2007]最大半连通子图

    Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...

  5. BZOJ1093 最大半连通子图

    Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意 两点u,v,存在一条u到v的有向路径或者从v到 ...

  6. BZOJ1093或洛谷2272 [ZJOI2007]最大半连通子图

    BZOJ原题链接 洛谷原题链接 和 Going from u to v or from v to u?(题解)这道题类似,只不过是求最大子图的大小和个数而已. 一样用\(tarjan\)求强连通分量, ...

  7. 2018.11.06 bzoj1093: [ZJOI2007]最大半连通子图(缩点+拓扑排序)

    传送门 先将原图缩点,缩掉之后的点权就是连通块大小. 然后用拓扑排序统计最长链数就行了. 自己yyyyyy了一下一个好一点的统计方法. 把所有缩了之后的点都连向一个虚点. 然后再跑拓扑,这样最后虚点的 ...

  8. BZOJ1093 [SCOI2003]字符串折叠

    Description 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S  S 2. X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S)  SSSS…S(X个S). ...

  9. bzoj1093[ZJOI2007]最大半连通子图(tarjan+拓扑排序+dp)

    Description 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u ...

随机推荐

  1. 【JAVA错误笔记】 - Unable add facets project AnnotationWebService CXF 2-x Web Services

    错误描述: 创建webservice接口服务时候提示: Unable add facets project AnnotationWebService CXF 2-x Web Services Unab ...

  2. nginx上搭建HLS流媒体服务器

    http://blog.csdn.net/cjsafty/article/details/7922849 简介:HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTT ...

  3. 了解JavaScript的执行上下文

    转自http://www.cnblogs.com/yanhaijing/p/3685310.html 什么是执行上下文? 当JavaScript代码运行,执行环境非常重要,有下面几种不同的情况: 全局 ...

  4. struts2的单文件下载

    一. 导入两个jar包 commons-fileupload-1.3.1.jar commons-io-2.4.jar 二.编写请求上传jsp <h1>文件列表--单文件</h1&g ...

  5. java.lang.Exception: Socket bind failed 服务器端口冲突-->修改端口

    需要修改三个端口号:%apache_tomcat6%/conf/server.xml 四月 11, 2014 11:39:25 上午 org.apache.catalina.core.AprLifec ...

  6. 开始学习requirejs+easyui的使用.

    开始学习requirejs+easyui的使用. 目录结构: |-project |-easyui01 |-js |-main.js |-index.html |-libs libs目录下放入的是ea ...

  7. sublime_2014-11-19

    http://xionggang163.blog.163.com/blog/static/376538322013930104310297/ 直接输入注册码就可以了 ----- BEGIN LICEN ...

  8. Codevs 1958 刺激

    1958 刺激 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description saffah的一个朋友S酷爱滑雪,并且追求刺激(exitement, ...

  9. Linux的前世今生

    Linux的起源 说到Linux[/ˈlɪnəks/],想必大家也会自然而然地想到他的创始人——被称为“Linux之父”的林纳斯·托瓦兹(Linus Torvalds).其实,在Linux出现之前,还 ...

  10. Lua数组排序

    代码 network = { {name = "grauna", IP = "210.26.30.34"}, {name = "arraial&quo ...