zoukankan      html  css  js  c++  java
  • poj1236 Network of Schools(SCC缩点+结论推导)

    第一问简单不讲。

    第二问简化后问题是给一张DAG求最少添加几条边使得DAG变成一个SCC。首先所有中间点(有入度有出度)肯定直接顺着走到无出度点,所以肯定是无出度点连向无入度点。

    把无入度点作为点集S,把无出度点作为点集T。

    二分图连边表示S点(入度为零)可以走到T点(出度为零),然后先暴力匹配,表示每一个$S_i$尽可能走一个互不相同的$T_i$点,然后所有匹配边从$T_i$向下一个匹配的$S_{i+1}$连一条边,表示从$S_i o T_i o S_{i+1}$,如此往复,最终将最后一个$T_k$连向开始时的$S_1$,此时形成一个环,是SCC。然后剩下的没被选上的是不连通的。如果是$S_i$点表明他所有可以走到的$T$都被其他$S$走过去了,$T$也是一样,能走到他的$S$都走到其他点$T$了,就把每一对未匹配的$T$向$S$连一下边,最后如果还剩下来就随便连了。这样,会发现左右两侧的点就都被连上了一条边。所以最少连边数量是$max(|S|,|T|)$。如果要求方案的话就用这个二分图的匹配就行了,如果数据大了呢?再见

    注意:上述证明结论的方法我翻阅了绝大部分网络题解,发现讲的都比较随便,都是“无出度点和无入度点随便两两匹配,直到每个点都有出度入度就是SCC了”。

    错误在于:1.并不是随便选无出度点和无入度点的。hack!

    n=4  m=3
    1 3
    1 2
    4 3

    2.并不是每个点都有入度和出度就是SCC了,可能是两个环通过一个有向边相连什么的。

    所以我认为大部分题解的证明和构造答案方法都是错的。

    当然我并没有就认为我的一定是对的。如果有谁可以推翻我的改正说法,欢迎爆踩指正。

    代码什么的。。网上满天飞了。

  • 相关阅读:
    [SDOi2012]Longge的问题(洛谷 2303)
    Biorhythms(信息学奥赛一本通 1639)
    【NOI2002】荒岛野人(信息学奥赛一本通 1637)(洛谷 2421)
    青蛙的约会(信息学奥赛一本通 1631)(洛谷 1516)
    负数求余究竟怎么求???
    X-factor Chain(信息学奥赛一本通 1628)
    同余问题2(超详细!!!)
    map函数怎么用咧↓↓↓
    同余问题1(超详细!!!)
    python -- 连接 orclae cx_Oracle的使用 二
  • 原文地址:https://www.cnblogs.com/saigyouji-yuyuko/p/11776992.html
Copyright © 2011-2022 走看看