每个人到他认为最强的人连一条边。

缩点后,入度为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 强联通相关推荐

  1. BZOJ 2140 稳定婚姻(强联通分量判环)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2140 是 hydro 的 BZOJ ...

  2. [HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6165 题意:问一个有向图中是否有任意两点可以到达. 读错题就彻底输了,读成判断是否有任意条路,使得经过 ...

  3. poj2186强联通(牛仰慕)

    题意:       有一群老牛,他们之间有m组敬仰关系,关系可以传递,a仰慕b,b仰慕c,那么a就仰慕c,现在问被所有老牛都仰慕 的有多少? 思路:       想想,是不是一个环中的老牛的关系都是一 ...

  4. POJ1904 强联通(最大匹配可能性)

    题意:       有n个王子,n个公主,然后给你每个王子喜欢的公主,最后问你在不影响最大匹配的前提下,每个王子可以匹配那些公主. 思路:       是hdu4685的减弱版,之前研究过hdu468 ...

  5. POJ2186 强联通

    题意:       有一群老牛,给你一些关系,a b表示牛a仰慕牛b,最后问你有多少个牛是被所有牛仰慕的. 思路:       假如这些仰慕关系不会出现环,那么当且仅当只有一只牛的出度为0的时候答案才 ...

  6. [拓扑排序/强联通分量] [NOIP201402] 信息传递

    信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日 ...

  7. POJ 2186 popular cow 有向图的强联通问题 Tarjan算法

    参考:http://hi.baidu.com/1093782566/blog/item/e5a0e9229913bd048b82a175.html http://www.cppblog.com/Iro ...

  8. [图论]强联通分量+缩点 Summer Holiday

    Summer Holiday Description 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系 ...

  9. CodeForces 1213F (强联通分量分解+拓扑排序)

    传送门 •题意 给你两个数组 p,q ,分别存放 1~n 的某个全排列: 让你根据这两个数组构造一个字符串 S,要求: (1)$\forall i \in [1,n-1],S_{pi}\leq S _ ...

  10. 无向图强联通分量-洛谷 P2860 [USACO06JAN]冗余路径Redundant Paths

    https://www.luogu.org/problem/show?pid=2860 这个就是无向图的强联通: 有向图的两点再一个分量里,是x可以到y,y也可到x: 但无向图本来就是双向的,所以我们 ...

最新文章

  1. 第十、十一周项目-阅读程序,写出这些程序的运行结果(1)
  2. CMSGC造成内存碎片的解决方法
  3. openocd for windows
  4. JavaScript性能优化【下】--性能优化的具体方式
  5. 从零开始学_JavaScript_系列(22)——dojo(9)(表单、JsonRest的post方法,widget的使用思路)...
  6. 【操作系统】—中断和异常
  7. python 微信数据_python 处理微信对账单数据的实例代码
  8. 拓端tecdat|R语言中的生存分析Survival analysis晚期肺癌患者4例
  9. c语言中find的作用,c语言find函数的用法详解
  10. 群晖室开虚拟机安装于服务器,黑群晖虚拟机安装
  11. Choerodon猪齿鱼团队敏捷项目管理实践应用
  12. 概率统计Python计算:双正态总体均值差的单侧区间估计
  13. 解决mysql插入中文出现错误ERROR 1366 (HY000): Incorrect string value: ‘\x80\x85\xEF\xBC\x8C\xE6...‘ for column
  14. Jetson Tegra X系列刷机教程
  15. 同一服务器不同端口网页,Apache Web服务器,在同一服务器上的不同端口上的多个应用程序...
  16. find vba 模糊_求Find模糊查找和绝对查找的方法。
  17. ECMAScript(pink)
  18. 利用西瓜播放器(xgplayer)实现直播点播
  19. Python加密word文档
  20. ASEMI整流桥GBP406~GBP410,GBP406参数,GBP410图片

热门文章

  1. 关于MSTP的个人总结,如何查看华为生成树状态信息
  2. 由磁场数据和加速度数据计算初始姿态角
  3. docker 定时重启脚本_定时启动docker容器
  4. linux驱动与设备实例(字符设备(互斥读写),misc设备和platform_device)
  5. html5霓虹效果代码,HTML5 canvas蜂巢式彩色霓虹背景效果
  6. Android 常用开发工具以及Mac常用软件
  7. 幂函数展开c语言,第三章幂函数展开.pdf
  8. python 单词拆音节_基于Trie树进行拆分字符串变成拼音音节(一):构建拼音音节模型...
  9. SAP将未审批的采购订单提交到OA去审批 程序 OA审批结果返回到SAP
  10. 80004005错误代码_关于访问共享时出现80004005错误