#2094:产生冠军(拓扑排序)

2021-02-06 23:19

阅读:593

Yes
No

AC代码1:

#include 
#include 
#include 
using namespace std;
int main() {
    int n;
    set all, lose;
    string Winner, loser;

    while (cin >> n && n != 0) {
        all.clear();
        lose.clear();

        while (n--) {
            cin >> Winner >> loser;
			//统计所有的赢家和输家
            all.insert(Winner);
            all.insert(loser);

            lose.insert(loser);
        }

        // 只有一人没有输,才有冠军
        if (all.size() - lose.size() == 1)
            cout 

AC代码2:拓扑排序法

输入A 战胜 B时,就让B指向A。

最后,指向空的就说明没有人战胜过他。如果这样的人只存在一个,那他就是冠军了。

这里名字映射直接用C++的STL库map,和set。

#include 
#include 
#include 
#include 
using namespace std;

int main(void)
{
  int n, i, t;
  string b, e;
  set  s;
  set ::iterator it;
  map  m;
  map ::iterator iter;

  while (cin >> n, n)
  {
    s.clear();
    m.clear();
    for (i = 0; i > b >> e;
      s.insert(b);
      s.insert(e);
      m[e] = b;
    }
    for (t = 0, it = s.begin(); it != s.end(); it++)
    {
      if (!m[*it].length())
        t++;
    }
    puts(t == 1 ? "Yes" : "No");
  }
  return 0;
}

#2094:产生冠军(拓扑排序)

标签:iter   code   amp   拓扑排序   lin   panel   之间   namespace   map   

原文地址:https://www.cnblogs.com/RioTian/p/12778849.html


评论


亲,登录后才可以留言!