这个题,翻译一下题面,就是一个连通图,找他的最长链的数量。。。

所以说方法就比较明显了:tarjan缩点+拓扑+DP

注意也是本题唯一坑点,拓扑DP的时候要考虑重复边的情况。。。

呆码:

#include<iostream>
#include<cstdio>
#define N 100010
#define M 1000010
using namespace std; struct asd{
int nxt;
int to;
} a[M<<],b[M]; int head[M<<],headd[M],t[N],dfn[N],low[N],stack[N];
int num[N],belong[N],tmp[N],f[N],g[N],vis[N];
int sum,number,top,cnt,n,m,mo,mx,ans;
bool use[N]; inline void add(int x,int y)
{
a[++sum].nxt=head[x];
a[sum].to=y;
head[x]=sum;
} inline void bdd(int x,int y)
{
b[++sum].nxt=headd[x];
b[sum].to=y;
headd[x]=sum;
t[y]++;
} inline void tarjan(int u)
{
number++;
dfn[u]=low[u]=number;
stack[++top]=u;
use[u]=;
for(int i=head[u];i;i=a[i].nxt)
{
int v=a[i].to;
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(use[v])
low[u]=min(low[u],dfn[v]);
}
int v;
if(dfn[u]==low[u])
{
cnt++;
do{
num[cnt]++;
v=stack[top--];
belong[v]=cnt;
use[v]=;
}while(u!=v);
}
} inline void rebuild()
{
for(int i=;i<=n;i++)
for(int j=head[i];j;j=a[j].nxt)
if(belong[i]!=belong[a[j].to])
bdd(belong[i],belong[a[j].to]);
} int main()
{
scanf("%d%d%d",&n,&m,&mo);
int x,y;
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
} for(int i=;i<=n;i++)
if(!dfn[i])
tarjan(i);
sum=; rebuild(); int Head=,Tail=;
for(int i=;i<=cnt;i++)
{
if(!t[i]) tmp[++Tail]=i;
f[i]=num[i]; g[i]=;
}
while(Head<Tail)
{
int now=tmp[++Head];
for(int i=headd[now];i;i=b[i].nxt)
{
int v=b[i].to; t[v]--;
if(!t[v]) tmp[++Tail]=v;
if(vis[v]==now) continue;
if(f[now]+num[v]>f[v])
{
f[v]=f[now]+num[v];
g[v]=g[now];
}
else if(f[now]+num[v]==f[v])
g[v]=(g[v]+g[now])%mo;
vis[v]=now;
}
} for(int i=;i<=cnt;i++)
{
if(f[i]>mx) mx=f[i],ans=g[i];
else if(f[i]==mx) ans=(ans+g[i])%mo;
} printf("%d\n%d",mx,ans);
}

代码

[ZJOI2007]最大半联通子图的更多相关文章

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

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

  2. bzoj1093 [ZJOI2007]最大半联通子图 缩点 + 拓扑序

    最大半联通子图对应缩点后的$DAG$上的最长链 复杂度$O(n + m)$ #include <cstdio> #include <cstring> #include < ...

  3. [bzoj 1093][ZJOI2007]最大半联通子图(强联通缩点+DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1093 分析: 首先肯定是先把强联通全部缩成一个点,然后成了一个DAG 下面要知道一点: ...

  4. BZOJ 1093 [ZJOI2007] 最大半连通子图(强联通缩点+DP)

    题目大意 题目是图片形式的,就简要说下题意算了 一个有向图 G=(V, E) 称为半连通的(Semi-Connected),如果满足图中任意两点 u v,存在一条从 u 到 v 的路径或者从 v 到 ...

  5. 【BZOJ1093】【ZJOI2007】最大半联通子图 [DP][Tarjan]

    最大半连通子图 Time Limit: 30 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description 一个有向图G=(V,E)称为 ...

  6. bzoj1093【ZJOI2007】最大半联通子图

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1093 sol  :一开始理解错题意了QAQ,还莫名其妙写挂了QAQ,调了半天 首先显然一个强联 ...

  7. 洛谷 P2272 [ZJOI2007]最大半连通子图 解题报告

    P2272 [ZJOI2007]最大半连通子图 题目描述 一个有向图\(G=(V,E)\)称为半连通的\((Semi-Connected)\),如果满足:\(\forall u,v \in V\),满 ...

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

    [ZJOI2007]最大半连通子图 题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v ...

  9. BZOJ 1093 [ZJOI2007]最大半连通子图

    1093: [ZJOI2007]最大半连通子图 Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1986  Solved: 802[Submit][St ...

随机推荐

  1. jQuery图片无缝轮播

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. ASP.NET Core SignalR

    ASP.NET Core SignalR 是微软开发的一套基于ASP.NET Core的与Web进行实时交互的类库,它使我们的应用能够实时的把数据推送给Web客户端. 功能 自动管理连接 允许同时广播 ...

  3. sublime text 入门

    sublime text3入门教程 2017年07月19日 09:15:51 阅读数:13736 作者:sam976 转载需征得作者本人同意,谢谢. 1.介绍 所谓工欲善其事必先利其器,编码过程合理熟 ...

  4. 表单、框架结构的大概、CSS开头(选择器以及常用属性)

    <!--为网页添加图标,写在头部--> <link rel="shortcut icon" href="favicon.ico(路径)" ty ...

  5. Shell 变量知识

    1.自定义变量:自定义变量不能以数字开头. ()root#a=’cd /etc/’ #设置自定义变量. root#etho $a #使用变量. 2.全局变量:export可设置全局变量不能以数字开头. ...

  6. 虚拟主机、VPS、ECS云服务器 区别

    在阿里云上买了个云服务器. ssh命令都没通,找服务端同事帮我看,说我买错了.应该买ECS. 1.虚拟主机 虚拟主机就是利用虚拟化的技术,将一台服务器划分出一定大小的空间,每个空间都给予单独的 FTP ...

  7. 【java】J2EE、J2SE和J2ME的区别

    本文向大家简单介绍一下J2EE.J2SE.J2ME概念及区别,J2EE,J2SE,J2ME是java针对不同的的使用来提供不同的服务,也就是提供不同类型的类库. Java2平台包括:标准版(J2SE) ...

  8. 【问题解决:启动卡死】Eclipse启动卡死的解决办法

    问题描述 Eclipse启动后卡死 问题分析 由于上一次没有正确关闭,导致在启动的时候开始 问题解决 方法1(推荐): 到<workspace>\.metadata\.plugins\or ...

  9. springboot热部署(二)——springboot热部署与发布

    一.实现的方式概述 注意以下的热部署方式在IDEA是默认没有打开自动编译的,手动编译需要快捷键(Ctrl+Shift+F9),自动编译的修改配置如下:(注意刷新不要太快,会有1-2秒延迟) File- ...

  10. Nginx 配置负载均衡

    nginx负载均衡配置,主要是proxy_pass,upstream的使用. 注意问题,多台机器间session的共享问题. 不用session,用户cookie.或者用redis替代session. ...