Algorithm 用图表示的算法问题

Algorithm 用图表示的算法问题,algorithm,Algorithm,假设我有N支足球队。对于每支球队,我都知道可以击败她的对手(对手的数量可以是0)。如果我能“修正”比赛(自己安排),我需要看看我能修正多少队获胜的结果 例如,假设我有5个团队。输入: 5 1 5 (team 1 loses from 1 opponent->5) 3 1 4 5(team 2 loses from 3 opponents->1,4,5) 2 1 4(team 3 loses from 2 opponents->1,4) 1 1 1 3 输出:4(我可以修正1,

假设我有N支足球队。对于每支球队,我都知道可以击败她的对手(对手的数量可以是0)。如果我能“修正”比赛(自己安排),我需要看看我能修正多少队获胜的结果

例如,假设我有5个团队。输入:

5
1 5 (team 1 loses from 1 opponent->5)
3 1 4 5(team 2 loses from 3 opponents->1,4,5)
2 1 4(team 3 loses from 2 opponents->1,4)
1 1
1 3
输出:4(我可以修正1,3,4,5的结果) 例如,如果我想要1赢,比赛必须是:

  • 5-3=>winner=3
  • 4-1=>winner=1
  • 3-1=>winner=1
  • 2-1=>winner=1
  • 我想创建一个有向图,其中从u到v的边(u,v)意味着u队输给v队。如果在决赛中按顺序进行比赛,那么v队(假设我们希望v队获胜)必须与属于u对v顶点(u输给v)的球队比赛。所以u队要么直接跳到决赛,要么进行决赛前的比赛,她用同样的逻辑获胜。我想问的是:当存在多个(u,v)边(v是我们想要赢的球队)时,我们应该怎么做?在找到一支输给v的球队后,我陷入困境,不知道如何继续。

    单个淘汰赛的输家树是一棵树,其中赢家是根节点,其他节点的父节点是它输给的节点。正如Prune所指出的,当且仅当存在一个以节点为根的失败者树,并且每个失败者->赢家弧出现在图中时,才可以修复特定节点的锦标赛。“只有在”的方向是明显的;“if”方向通过按后序遍历的顺序安排匹配来遵循

    更进一步地讲,当且仅当存在从获胜者到彼此节点的有向路径时,才存在这样一棵树。“仅当”方向明显(仅提取树中的路径);“如果”方向遵循深度优先或广度优先搜索,如删减注释所示


    图的可达性结构由图的可及性总结而成。Tarjan给出了一个线性时间算法来标记每个节点及其强连接组件。给定这些标签,您要查找的正是一个强连接的组件,其中没有节点具有到任何其他组件的传出弧。此组件中的每个人都可以成为赢家,其他任何人都不能。如果有两个或两个以上这样的组成部分,那么(a)我想有可能抽签一场锦标赛(b)没有可能的赢家。

    Bid您为第2队和第3队输入了错误的内容吗?是否应该是
    3 1 4 5(第3队输了…
    2 1 4(第2队输了…
    ?还有,最后两行呢?
    11
    是否意味着“1队输给1队”?另外,5队(或通常为n队)的“括号”是什么意思团队?请删除此问题的答案。我觉得您仍然需要研究基本的图算法。您有一个有向图。对于每个节点,您需要确定是否存在以该节点为根的生成树。您担心的情况可以通过使用BFS或DFS的现有遍历算法解决(广度优先或深度优先搜索)。也要查找术语“回溯”。简单地说,你依次跟踪每条轨迹,直到找到一条适合你的轨迹。如果你用尽了可能,那么就没有办法让该团队成为冠军。非常感谢你的解决方案!