题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1093

缩点+拓扑,更新长度的时候维护方案数。

结果没想到处理缩点后的重边,这样的话方案数会算多。

学习人家处理重边的方法好好。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+,M=1e6+;
int n,m,hd[N],rd[N],cd[N],mod,dp[N],f[N],ans,prn,lst[N];
int dfn[N],low[N],tim,cnt,col[N],sta[N],top,h,t,siz[N];
bool ins[N];
struct Ed{
int nxt,fr,to;
Ed(int n=,int f=,int t=):nxt(n),fr(f),to(t) {}
}ed[M];
int rdn()
{
int ret=;char ch=getchar();
while(ch>''||ch<'')ch=getchar();
while(ch>=''&&ch<='')(ret*=)+=ch-'',ch=getchar();
return ret;
}
void tarjan(int cr)
{
dfn[cr]=low[cr]=++tim;
ins[cr]=;sta[++top]=cr;
for(int i=hd[cr],v;i;i=ed[i].nxt)
if(!dfn[v=ed[i].to])
tarjan(v),low[cr]=min(low[cr],low[v]);
else if(ins[v])low[cr]=min(low[cr],dfn[v]);
if(dfn[cr]==low[cr])
{
cnt++;
while(sta[top]!=cr)
{
int k=sta[top--];col[k]=cnt;ins[k]=;siz[cnt]++;
}
top--;col[cr]=cnt;ins[cr]=;siz[cnt]++;
}
}
int main()
{
n=rdn();m=rdn();mod=rdn();
int x,y;
for(int i=;i<=m;i++)
{
x=rdn();y=rdn();
ed[i]=Ed(hd[x],x,y);hd[x]=i;
}
for(int i=;i<=n;i++)if(!dfn[i])tarjan(i);
memset(hd,,sizeof hd);
for(int i=,u,v;i<=m;i++)
if((u=col[ed[i].fr])!=(v=col[ed[i].to]))
ed[i]=Ed(hd[u],u,v),hd[u]=i,rd[v]++,cd[u]++;
h=;t=;
for(int i=;i<=n;i++)
if(!rd[i])dp[i]=siz[i],f[i]=,sta[++t]=i;
while(h<=t)
{
int k=sta[h++];
for(int i=hd[k],v;i;i=ed[i].nxt)
{
rd[v=ed[i].to]--;if(!rd[v])sta[++t]=v;
if(lst[v]==k)continue;//会把k的出边全走完,所以不会对v先x再y再x地更新
if(dp[k]+siz[v]>dp[v])dp[v]=dp[k]+siz[v],f[v]=f[k];
else if(dp[k]+siz[v]==dp[v])(f[v]+=f[k])%=mod;
lst[v]=k;
}
}
for(int i=;i<=n;i++)if(!cd[i])
if(dp[i]>ans)ans=dp[i],prn=f[i];
else if(dp[i]==ans)(prn+=f[i])%=mod;
printf("%d\n%d\n",ans,prn);
return ;
}

最新文章

  1. SQLServer触发器创建、删除、修改、查看
  2. ajax知识整理
  3. Scrapy001-框架初窥
  4. CentOS 7 关闭防火墙
  5. HDU 3038 How Many Answers Are Wrong 并查集带权路径压缩
  6. 解决MS Office下载网站数据失败的问题
  7. 一个小程序[Socrates]中学到的Perl点滴
  8. [转]PHP经验——PHPDoc PHP注释的标准文档
  9. Python读取文件时输入文件绝对路径报错
  10. Java异常知识整理_处理异常时的性能开销
  11. ADO.NET工具类(三)
  12. Django——信号
  13. 架构师素养及从小菜进阶架构(CTO)的书籍【转】
  14. java 支付宝wap支付初识
  15. HDU 4714 Tree2cycle (树形DP)
  16. String和StringBuffer的一点研究
  17. 【bzoj2190】[SDOI2008]仪仗队 数论 欧拉函数 筛法
  18. Linux 下添加用户,修改权限
  19. 微信小程序清除默认样式
  20. maven依赖json-lib失败

热门文章

  1. Mybatis-generator/通用Mapper/Mybatis-Plus对比
  2. StringUtils工具
  3. 企业网盘居然支持高速局域网文件传输工具(速度可达20M)
  4. 【HZOI2015】帕秋莉的超级多项式
  5. day2-元组、字典、文件操作
  6. 12DUILib经典教程(实例)
  7. NSLayoutConstraint 开源框架
  8. date函数
  9. VS2010-MFC(对话框:为控件添加消息处理函数)
  10. 杂项-公司:Facebook