热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ACwing367.学校网络(tarjanDAG有向图的强联通分量

添加链接描述#includeusingnamespacestd;constintN110,M1e410;inth[N],ne[M],e[M],idx

添加链接描述

#include
using namespace std;
const int N=110,M=1e4+10;
int h[N],ne[M],e[M],idx,n;
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int dfn[N],low[N],ssc_cnt,id[N],timestamp,in_stack[N],size_scc[N];
stack<int>st;
void tarjan(int u){dfn[u]&#61;low[u]&#61;&#43;&#43;timestamp;st.push(u),in_stack[u]&#61;true;for(int i&#61;h[u];~i;i&#61;ne[i]){int j&#61;e[i];if(!dfn[j]){tarjan(j);low[u]&#61;min(low[u],low[j]);}else if(in_stack[j]){low[u]&#61;min(low[u],dfn[j]);}}if(dfn[u]&#61;&#61;low[u]){int j;&#43;&#43;ssc_cnt;do{j&#61;st.top();st.pop();in_stack[j]&#61;0;id[j]&#61;ssc_cnt;size_scc[ssc_cnt]&#43;&#43;;}while(u!&#61;j);}
}
int din[N],dout[N];
int main(){cin>>n;memset(h,-1,sizeof h);for(int i&#61;1;i<&#61;n;i&#43;&#43;){int x;while(cin>>x,x){add(i,x);}}for(int i&#61;1;i<&#61;n;i&#43;&#43;){if(!dfn[i]){tarjan(i);}}for(int i&#61;1;i<&#61;n;i&#43;&#43;){for(int j&#61;h[i];~j;j&#61;ne[j]){int k&#61;e[j];int a&#61;id[i],b&#61;id[k];if(a!&#61;b){dout[a]&#43;&#43;;din[b]&#43;&#43;;}}}int ans1&#61;0,ans2&#61;0;for(int i&#61;1;i<&#61;ssc_cnt;i&#43;&#43;){//遍历的是缩点后的DAG的联通分量数目if(!din[i])ans1&#43;&#43;;if(!dout[i])ans2&#43;&#43;;}cout<<ans1<<endl;if(ssc_cnt&#61;&#61;1)printf("0");else cout<<max(ans1,ans2)<<endl;return 0;
}

推荐阅读
  • 标准库Vector类型使用需要的头文件:#includeVector:Vector是一个类模板。不是一种数据类型。Vector ... [详细]
  • Bzoj1185最小矩阵覆盖[旋转卡壳+凸包+处理[0]情况]
    题目链接题目大意:就是给你若干个点用一个最小的矩形把这些点覆盖掉就是给你若干个点用一个最小的矩形把这些点覆盖掉就是给你若干个点用一个最小的矩形把这些点覆盖掉解题思路& ... [详细]
  • 题意:多模式串匹配,输出模式串的ID思路:典型AC自动机.用向量存储答案ID#include<cstdio>#include<cstring> ... [详细]
  • 对于一些不符合的点来说,肯定是被他的父节点上权值最小的点转换最好。首先我们先排除不可能情况也就是01不等之后发现,交换完两个数后,0不符合的和1不符合的个数各自-1,因此不会影响其 ... [详细]
  • 做了题还是忍不住要写一发题解,感觉楼下的不易懂啊。本题解使用latex纯手写精心打造。题意:求\(\frac{1}{x}\frac{1}{y}\frac ... [详细]
  • 哈密顿圈|回溯-6原文:https://www.geesfo ... [详细]
  • 实验六提交版
    1.21.3part2共用体与结构体类型的区别?答:共用体与结构体的区别在于它们的表示方法不同。结构体内,结构体的各成员顺序排列存储,每个成员都有自己独立的存储位置,而共用体的情况 ... [详细]
  • 套路题?感觉讲不清,先写建图把每个点拆成两个,A和B,S-Ai流量1费用0,Bi-T流量1费用0ÿ ... [详细]
  • ACM Trick点常用操作记录(持续更新)(敏感时间)
    敏感时间注意多维vector速度很慢如下图string类的连接#includeusingnamespacestd;intmain(){stringt ... [详细]
  •   好开心呀~果然只有不看题解做出来的题目才会真正的有一种骄傲与满足吧ヾ(๑╹◡╹)ノ  实际上这题只要顺藤摸瓜就可以了。首先按照数位dp的套路,有两维想必是省不掉:1.当前dp到到的位数;2. ... [详细]
  • *题意:往区间[1,10000000]的墙上贴海报,海报数量 ... [详细]
  • 1.关于new:new单个对象new在自由空间分配内存,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象 ... [详细]
  • poj 2421 Constructing Roads 解题报告
    题目链接:http:poj.orgproblem?id2421实际上又是考最小生成树的内容,也是用到kruskal算法。但稍稍有点不同的是, ... [详细]
  • 1.1.1InputStreampublicabstractclassInputStreamimplementsCloseableInputStreamm继承接口Closeable ... [详细]
  • 本文主要是由Wiskey大神的博客的结合少许个人的总结,传送门概念:状态压缩是以二进制来保存每一个的状态,比如总共的物品有n件,那么我一共的状态有2^n次,最大的状态用二进制表示为11. ... [详细]
author-avatar
呢嘚吖頭ing_311
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有