题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1093

sol  :一开始理解错题意了QAQ,还莫名其妙写挂了QAQ,调了半天

   首先显然一个强联通分量肯定要么都属于最大半联通子图,要么都不属于

   所以先用tarjan缩点,重建后得到一个DAG

   之后我们可以发现,得到的答案一定是一条链,所以要求最长链的长度和数量

   直接dp即可,记得判重(我挂了好久QAQ)

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int Mx=;
int n,m,p,maxn,ans,cnt,tag,top;
int dfn[Mx],low[Mx],val[Mx],belong[Mx],stk[Mx];
int in[Mx],f[Mx],g[Mx],vis[Mx];
bool instk[Mx];
int tot,head1[Mx],head2[Mx],nxt1[*Mx],ver1[*Mx],nxt2[*Mx],ver2[*Mx];
void add1(int x,int y)
{
nxt1[++tot]=head1[x];
ver1[tot]=y;
head1[x]=tot;
}
void add2(int x,int y)
{
nxt2[++tot]=head2[x];
ver2[tot]=y;
head2[x]=tot;
in[y]++;
}
void tarjan(int x)
{
dfn[x]=low[x]=++cnt;
stk[++top]=x,instk[x]=;
for(int i=head1[x];i;i=nxt1[i])
{
int y=ver1[i];
if(!dfn[y])
tarjan(y),
low[x]=min(low[x],low[y]);
else if(instk[y])
low[x]=min(low[x],dfn[y]);
}
if(low[x]==dfn[x])
{
int now=;tag++;
while(now!=x)
{
now=stk[top--];
instk[now]=;
val[tag]++;
belong[now]=tag;
}
}
}
void rebuild()
{
tot=;
for(int x=;x<=n;x++)
for(int i=head1[x];i;i=nxt1[i])
{
int y=ver1[i];
if(belong[x]!=belong[y])
add2(belong[x],belong[y]);
}
}
void dp()
{
int l=,r=;
for(int i=;i<=tag;i++)
{
if(!in[i]) stk[r++]=i;
f[i]=val[i],g[i]=;
}
while(l!=r)
{
int x=stk[l++];
for(int i=head2[x];i;i=nxt2[i])
{
int y=ver2[i]; in[y]--;
if(!in[y]) stk[r++]=y;
if(vis[y]==x) continue;
if(f[x]+val[y]>f[y])
{
f[y]=f[x]+val[y];
g[y]=g[x];
}
else if(f[x]+val[y]==f[y])
g[y]=(g[x]+g[y])%p;
vis[y]=x;
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&p);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
add1(x,y);
}
for(int i=;i<=n;i++) if(!dfn[i]) tarjan(i);
rebuild(); dp();
for(int i=;i<=tag;i++)
{
if(f[i]>maxn) maxn=f[i],ans=g[i];
else if(f[i]==maxn) ans+=g[i],ans%=p;
}
printf("%d\n%d\n",maxn,ans);
return ;
}

最新文章

  1. mysql导入导出.csv格式数据
  2. Memcached vs Redis
  3. 必须知道的SQL编写技巧,多条件查询不拼字符串的写法
  4. 关于新中新二代身份证读卡器DKQ-A16D的一些问题
  5. cocos2dx 3.8版关于#include &quot;GB2ShapeCache-x.h&quot;
  6. Centos Python2 升级到Python3
  7. Android之数据存储----使用LoaderManager异步加载数据库
  8. 【Slickflow学习】.NET开源工作流介绍、下载(一)
  9. Object调用静态方法
  10. NodeJs随心学习(一)之UEditor开源项目部署
  11. viewDidLoad、viewDidUnload、viewWillAppear、viewDidAppear、viewWillDisappear 和 -viewDidDisappear的区别和使用
  12. 在idea的maven项目使用el或jstl表达式
  13. iOS 解决键盘挡住输入框的问题
  14. Fortran+ OpenMP实现实例
  15. Pentaho data integration(kettle) 在Mac上启动不了
  16. 基于jTopo的拓扑图设计工具库ujtopo
  17. 『实践』百度地图给多个marker添加右键菜单(删除、更新)
  18. struts常量&lt;constant&gt;说明
  19. Shell Script的默认变量
  20. HDU 1217 Arbitrage(Bellman-Ford判断负环+Floyd)

热门文章

  1. 跟我一起从零开始学WCF系列课程
  2. 爬虫学习(八)——带cookie的网页进行爬取
  3. shell脚本:变量,文件判断,逻辑运算等纪要
  4. k8s资源配置清单的书写格式(yaml文件)
  5. Linux更改文件权限(二)
  6. 嵌入式开发 centos7 交叉编译环境准备
  7. JS大小转化B KB MB GB的转化方法
  8. hprose 1.0(rpc 框架) - 内部数据标准
  9. JZOJ 1265. Round Numbers
  10. JZOJ 2137. 【GDKOI2004】城市统计 (Standard IO)