zoukankan      html  css  js  c++  java
  • NKOJ2319 奇怪的班级 题解

      这是一道判断图中有没有奇环的问题,用dfs,二分图染色法即可。

      图的存储用邻接表表示,用邻接矩阵会MLE。

      需要注意的一点是图中点与点之间并不一定都是连通的,染色的时候不要漏点。

     1 #include<iostream>
     2 #include<map>
     3 #include<vector>
     4 #include<string>
     5 using namespace std;
     6 
     7 bool setSex(map<int, int>& sex, vector<vector<int> >& isLoved, int code, int sexCode)
     8 {
     9     sex[code] = sexCode;
    10     for (int i = 0; i < isLoved[code].size(); ++i)
    11     {
    12         if (sex[isLoved[code][i]] == sexCode)return true;
    13         if (sex[isLoved[code][i]] ==0&& setSex(sex, isLoved, isLoved[code][i], -sexCode))return true;
    14     }
    15     return false;
    16 }
    17 
    18 int main()
    19 {
    20     int t;
    21     cin >> t;
    22     for (int i = 0; i < t; ++i)
    23     {
    24         map<string, int> nameToCode;
    25         map<int, int> sex;//编号为i的人的性别。0代表未设定,1、-1分别代表男女
    26         int N, M;
    27         scanf("%d%d", &N, &M);
    28         vector<pair<int, int> > temp;
    29         int code=1;
    30         for (int j = 0; j < M; ++j)
    31         {
    32             string name1,name2;
    33             name1.resize(22);
    34             name2.resize(22);
    35             scanf(" %s", &name1[0]);
    36             scanf(" %s", &name2[0]);
    37             //cout << name1 << name2 << endl;
    38             if (!nameToCode[name1])
    39             {
    40                 nameToCode[name1] = code++;
    41             }
    42             if (!nameToCode[name2])
    43             {
    44                 nameToCode[name2] = code++;
    45             }
    46             temp.push_back({ nameToCode[name1] ,nameToCode[name2] });
    47         }
    48         vector<vector<int> > isLoved;
    49         for (int i = 0; i <= nameToCode.size(); ++i)
    50         {
    51             isLoved.push_back(vector<int>(0));
    52         }
    53         for (int i = 0; i < temp.size(); ++i)
    54         {
    55             isLoved[temp[i].first].push_back(temp[i].second);
    56             isLoved[temp[i].second].push_back(temp[i].first);
    57         }
    58         bool hasHomo = 0;
    59         for (int i = 1; i < nameToCode.size(); ++i)
    60         {
    61             if (sex[i]==0)
    62             {
    63                 if (setSex(sex, isLoved, i, 1) == true)
    64                 {
    65                     hasHomo = true;
    66                     break;
    67                 }
    68             }
    69         }
    70         if (hasHomo) printf("YES
    ");
    71         else printf("NO
    ");
    72     }
    73 }
    View Code
  • 相关阅读:
    http-server -S 开启 https 服务
    material-ui react的ui框架 有时间可以看看 chia用的前台ui
    关于vue.js:iview-Bug-5114在iview的Poptip气泡提示内调用DatePicker出现遮挡或同时关闭窗口等冲突问题[转]
    coding 的pages 静态要六分钱一个月,我也是醉了。
    jeesite 有时间看看
    选择单词后 按 ctrl + space 单词发音
    什么是CI/CD
    PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用
    浅析requestAnimationFrame
    webpack性能优化
  • 原文地址:https://www.cnblogs.com/Algorithm-X/p/7520306.html
Copyright © 2011-2022 走看看