URAL 1742 Team building 强联通
每个人到他认为最强的人连一条边。
缩点后,入度为0的点是最小解,强联通分量是最大解。
---
const int maxn=111100;
const int maxm=210000;
int n;
struct Node {int to,next;
} edges[maxm];
int head[maxn],edge;
void addedge(int u,int v) {edges[edge].to=v,edges[edge].next=head[u],head[u]=edge++;
}
void prepare() {memset(head,-1,sizeof head);edge=0;
}
int a[maxn];
int pre[maxn],lowlink[maxn],sccno[maxn],scc_cnt,dfs_clock;
stack<int>stk;
void dfs(int u) {pre[u]=lowlink[u]=++dfs_clock;stk.push(u);for (int i=head[u]; i!=-1; i=edges[i].next) {int v=edges[i].to;if (!pre[v]) {dfs(v);lowlink[u]=min(lowlink[u],lowlink[v]);} else if (!sccno[v]) {lowlink[u]=min(lowlink[u],pre[v]);}}if (lowlink[u]==pre[u]) {scc_cnt++;int x;do {x=stk.top();stk.pop();sccno[x]=scc_cnt;} while (x!=u);}
}
void find_scc(int n) {dfs_clock=scc_cnt=0;clr(sccno,0);clr(pre,0);while (!stk.empty()) stk.pop();REP_1(i,n) if (!pre[i]) dfs(i);
}
int num[maxn];
int main() {memset(num,0,sizeof num);scanf("%d",&n);prepare();for (int i=1; i<=n; i++) {scanf("%d",&a[i]);addedge(i,a[i]);}find_scc(n);for (int i=1; i<=n; i++) {if (sccno[i]!=sccno[a[i]]) {num[sccno[a[i]]]++;}}int cnt=0;for (int i=0; i<scc_cnt; i++) {if (num[i]==0) cnt++;}printf("%d %d\n",cnt,scc_cnt);return 0;
}
---
URAL 1742 Team building 强联通相关推荐
- BZOJ 2140 稳定婚姻(强联通分量判环)【BZOJ修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2140 是 hydro 的 BZOJ ...
- [HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6165 题意:问一个有向图中是否有任意两点可以到达. 读错题就彻底输了,读成判断是否有任意条路,使得经过 ...
- poj2186强联通(牛仰慕)
题意: 有一群老牛,他们之间有m组敬仰关系,关系可以传递,a仰慕b,b仰慕c,那么a就仰慕c,现在问被所有老牛都仰慕 的有多少? 思路: 想想,是不是一个环中的老牛的关系都是一 ...
- POJ1904 强联通(最大匹配可能性)
题意: 有n个王子,n个公主,然后给你每个王子喜欢的公主,最后问你在不影响最大匹配的前提下,每个王子可以匹配那些公主. 思路: 是hdu4685的减弱版,之前研究过hdu468 ...
- POJ2186 强联通
题意: 有一群老牛,给你一些关系,a b表示牛a仰慕牛b,最后问你有多少个牛是被所有牛仰慕的. 思路: 假如这些仰慕关系不会出现环,那么当且仅当只有一只牛的出度为0的时候答案才 ...
- [拓扑排序/强联通分量] [NOIP201402] 信息传递
信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日 ...
- POJ 2186 popular cow 有向图的强联通问题 Tarjan算法
参考:http://hi.baidu.com/1093782566/blog/item/e5a0e9229913bd048b82a175.html http://www.cppblog.com/Iro ...
- [图论]强联通分量+缩点 Summer Holiday
Summer Holiday Description 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系 ...
- CodeForces 1213F (强联通分量分解+拓扑排序)
传送门 •题意 给你两个数组 p,q ,分别存放 1~n 的某个全排列: 让你根据这两个数组构造一个字符串 S,要求: (1)$\forall i \in [1,n-1],S_{pi}\leq S _ ...
- 无向图强联通分量-洛谷 P2860 [USACO06JAN]冗余路径Redundant Paths
https://www.luogu.org/problem/show?pid=2860 这个就是无向图的强联通: 有向图的两点再一个分量里,是x可以到y,y也可到x: 但无向图本来就是双向的,所以我们 ...
最新文章
- 第十、十一周项目-阅读程序,写出这些程序的运行结果(1)
- CMSGC造成内存碎片的解决方法
- openocd for windows
- JavaScript性能优化【下】--性能优化的具体方式
- 从零开始学_JavaScript_系列(22)——dojo(9)(表单、JsonRest的post方法,widget的使用思路)...
- 【操作系统】—中断和异常
- python 微信数据_python 处理微信对账单数据的实例代码
- 拓端tecdat|R语言中的生存分析Survival analysis晚期肺癌患者4例
- c语言中find的作用,c语言find函数的用法详解
- 群晖室开虚拟机安装于服务器,黑群晖虚拟机安装
- Choerodon猪齿鱼团队敏捷项目管理实践应用
- 概率统计Python计算:双正态总体均值差的单侧区间估计
- 解决mysql插入中文出现错误ERROR 1366 (HY000): Incorrect string value: ‘\x80\x85\xEF\xBC\x8C\xE6...‘ for column
- Jetson Tegra X系列刷机教程
- 同一服务器不同端口网页,Apache Web服务器,在同一服务器上的不同端口上的多个应用程序...
- find vba 模糊_求Find模糊查找和绝对查找的方法。
- ECMAScript(pink)
- 利用西瓜播放器(xgplayer)实现直播点播
- Python加密word文档
- ASEMI整流桥GBP406~GBP410,GBP406参数,GBP410图片
热门文章
- 关于MSTP的个人总结,如何查看华为生成树状态信息
- 由磁场数据和加速度数据计算初始姿态角
- docker 定时重启脚本_定时启动docker容器
- linux驱动与设备实例(字符设备(互斥读写),misc设备和platform_device)
- html5霓虹效果代码,HTML5 canvas蜂巢式彩色霓虹背景效果
- Android 常用开发工具以及Mac常用软件
- 幂函数展开c语言,第三章幂函数展开.pdf
- python 单词拆音节_基于Trie树进行拆分字符串变成拼音音节(一):构建拼音音节模型...
- SAP将未审批的采购订单提交到OA去审批 程序 OA审批结果返回到SAP
- 80004005错误代码_关于访问共享时出现80004005错误