当前位置: 首页 > news >正文

E. Split Into Two Sets

https://codeforces.com/problemset/problem/1702/E

题意:给定n个多米诺骨牌,n是偶数,每个牌子上写了两个数字。现在要把这些牌子分成两个set,每个set中的数字不能重复,问是否有解。

思路:把每个多米诺骨牌看出是一条边,问题转化为二分图染色。

总结:想不出来贪心为啥错的。。也不是很理解为啥要用二分图,直观的感受,如果一条边属于第一个set,那么前两个点都属于第一个set,但是二分图,愣是把一条边拆成了两个set,抽象。。

inline void solve() {int n;cin >> n;vector<vector<int>> al(n + 1);vector<int> cnt(n + 1);bool ok = true;for (int i = 1; i <= n; ++i) {int u, v;cin >> u >> v;al[u].push_back(v);al[v].push_back(u);cnt[u] ++;cnt[v] ++;if (max(cnt[u], cnt[v]) > 2 || u == v) {ok = false;}}if (!ok) {cout << "NO\n";return;}vector<int> colors(n + 1, -1);auto dfs = [&](auto&& self, int u, int p)->bool{colors[u] = !colors[p];for (const auto& v : al[u]) {if (colors[v] != -1) {if (colors[v] != !colors[u]) {return false;}}else if (!self(self, v, u)) {return false;}}return true;};colors[0] = 1;for (int i = 1; i <= n; ++i) {if (colors[i] == -1 && !(dfs(dfs, i, 0))) {cout << "NO\n";return;}}cout << "YES\n";
}
http://www.sczhlp.com/news/325.html

相关文章:

  • 2025.7.28学习日记
  • BSC 验证者获取接口的时间差问题分析 - 若
  • 教师资格证考试笔试报名流程
  • linux RabbitMq 消息队列
  • TheHackersLabs Torrijas writeup
  • 蔚来汽车携手通义灵码入选 2025 世界人工智能大会标杆案例
  • CRMEB会员电商系统高可用集群部署实战:阿里云COS静态资源分离方案详解
  • 麦当劳 - 1
  • 一个简单的文字特效
  • openGauss关于日期的计算注意事项
  • 一文带你全面了解教师资格证
  • 小飞标签
  • P6246 邮局题解
  • [lnsyoj2085] 底垫
  • 病从口入,祸从口出
  • 7.28
  • 基于 PyTorch 的端到端验证码识别系统设计与实现
  • Linux安装 MYSQL
  • Groovy注入
  • P1545 Dividing the Path G(线段树+动态规划)
  • .NET4通过HTTP操作MINIO
  • Gitee:重塑中国企业级研发基础设施的三大战略支点
  • SAP生产订单报工的“最终确认”、“结清未清预留”,你真弄清楚了吗?
  • 基于图像处理与SVM的验证码识别系统实现
  • 基于因子图与和积算法的MATLAB实现
  • 【文献阅读】AnyEdit:编辑语言模型中编码的任何知识
  • Web前端入门第 82 问:JavaScript cookie 有大小限制吗?溢出会怎样?
  • 二分
  • lazarus无法编译Linux下的动态库
  • 微信小程序提示不在合法域名问题