Tarjan 模板题

第一问就是缩点之后看有多少个入度为零的点就好了。

第二问是在缩点后将每个点的入度和出度都求出(只要有入度或出度就置为1),然后比较哪个有值的多,将多的作为答案输出。原因是由题可得,要使缩完的点也构成一个强连通分

量,即入度和出度都大于等于1。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 10010
using namespace std;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
struct node
{
int v,nex;
}edge[maxn];
int n,cnt,inl,top,res1,res2,num,cd2,rd2;
int head[maxn],st[maxn],low[maxn],dfn[maxn],inn[maxn],si[maxn],rd[maxn],cd[maxn];
inline void add(int x,int y)
{
cnt++;
edge[cnt].v=y;
edge[cnt].nex=head[x];
head[x]=cnt;
}
inline void Tarjan(int from)
{
dfn[from]=low[from]=++num;
st[++top]=from;
for(int i=head[from];i!=-;i=edge[i].nex)
{
int to=edge[i].v;
if(!dfn[to])
{
Tarjan(to);
low[from]=min(low[from],low[to]);
}
else if(!inn[to])
low[from]=min(low[from],dfn[to]);
}
if(low[from]==dfn[from])
{
inn[from]=++inl;
++si[inl];
while(st[top]!=from)
{
++si[inl];
inn[st[top]]=inl;
--top;
}
--top;
}
}
int main()
{
memset(head,-,sizeof(head));
n=read();
for(int i=;i<=n;i++)
{
int x;
while()
{
x=read();
if(x!=)add(i,x);
else break;
}
}
for(int i=;i<=n;i++)
if(!dfn[i])
Tarjan(i);
for(int i=;i<=n;i++)
for(int j=head[i];j!=-;j=edge[j].nex)
{
if(inn[i]!=inn[edge[j].v])
{
rd[inn[edge[j].v]]++;
cd[inn[i]]++;
} }
if(inl==)
{
cout<<<<endl<<;
return ;
}
for(int i=;i<=inl;i++)
if(rd[i]==)
res1++;
write(res1);
cout<<endl;
for(int i=;i<=inl;i++)
{
if(cd[i]==)
cd2++;
if(rd[i]==)
rd2++;
}
res2=max(cd2,rd2);
write(res2);
return ;
}
请各位大佬斧正(反正我不认识斧正是什么意思)

最新文章

  1. Javascript 错误捕获
  2. windows7 下的日期没有internet时间的选项卡
  3. Oracle Rac crs无法启动
  4. Java基础——关键字
  5. Python学习笔记一--字符串的使用
  6. C#总结(一)
  7. 图片翻页效果引出的animate.css,很好玩,多动动吧~
  8. c++连接mysql数据库(使用mysql api方式,环境VS2013+MYSQL5.6)
  9. C#.NET面向对象(语法点)
  10. GameUnity 2.0 文档(二) 纸片人系统
  11. HTML&amp;CSS Table元素详细解说
  12. Jmeter-----【mac电脑】配置web浏览器的代理抓取请求
  13. Java(日期、随机数、系统工具类)
  14. java搭建SSM的Web开发框架-整合这3者用到的配置文件
  15. html(二)常见符号
  16. Cocos Creator 安装和启动,Dashboard 的介绍
  17. @repository的含义,并且有时候却不用写,为什么?
  18. 【Android】Android 8种对话框(Dialog)
  19. UVa 127 纸牌游戏(栈)
  20. MySQL使用全文索引(fulltext index)---高性能

热门文章

  1. Flask源码之:路由加载
  2. 【LEETCODE】61、对leetcode的想法&amp;数组分类,适中级别,题目:162、73
  3. Go chan 结构体 写入文件
  4. 1、C#多线程基础理论
  5. docker save load export import的区别
  6. for循环优化
  7. oracle plsql基本语法
  8. MySQL-By孙胜利-sifangku.com
  9. Android选项卡TabHost功能和用法
  10. Sign in with apple