news 2026/4/22 18:10:03

贪心构造+枚举子集+有向图判环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
贪心构造+枚举子集+有向图判环

lc3445

无向图当中用一个数组标记每个节点是否访问过,记录这个节点它的父节点,如果一个节点不是fa &&被访问过,就说明环

可以bfs/dfs/union判环

推到有向图 两种状态表示已经无法判定,我们可以用到三色染色法

class Solution {

public:
vector<vector<int>> supersequences(vector<string>& words) {
// 收集有哪些字母,同时建图
int all = 0, mask2 = 0;
vector<int> g[26]{};
for (auto& s : words) {
int x = s[0] - 'a', y = s[1] - 'a';
all |= 1 << x | 1 << y;
if (x == y) {
mask2 |= 1 << x;
}
g[x].push_back(y);
}

// 判断是否有环
auto has_cycle = [&](int sub) -> bool {
int color[26]{};
auto dfs = [&](this auto&& dfs, int x) -> bool {
color[x] = 1;
for (int y : g[x]) {
// 只遍历在 sub 中的字母
if ((sub >> y & 1) == 0) {
continue;
}
if (color[y] == 1 || color[y] == 0 && dfs(y)) {
return true;
}
}
color[x] = 2;
return false;
};
for (int i = 0; i < 26; i++) {
// 只遍历在 sub 中的字母
if (color[i] == 0 && sub >> i & 1 && dfs(i)) {
return true;
}
}
return false;
};

unordered_set<int> st;
int max_size = 0;
// 枚举 mask1 的所有子集 sub
int mask1 = all ^ mask2;
int sub = mask1;
do {
int size = popcount((unsigned) sub);
// 剪枝:如果 size < min_size 就不需要判断了
if (size >= max_size && !has_cycle(sub)) {
if (size > max_size) {
max_size = size;
st.clear();
}
st.insert(sub);
}
sub = (sub - 1) & mask1;
} while (sub != mask1);

vector<vector<int>> ans;
for (int sub : st) {
vector<int> cnt(26);
for (int i = 0; i < 26; i++) {
cnt[i] = (all >> i & 1) + ((all ^ sub) >> i & 1);
}
ans.push_back(cnt);
}
return ans;
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 21:50:48

社会网络仿真软件:UCINET_(4).数据准备与导入

数据准备与导入 在进行社会网络分析之前&#xff0c;首要步骤是准备好数据并将其导入到UCINET中。数据准备涉及数据的收集、清洗和格式化&#xff0c;而数据导入则是将准备好的数据加载到UCINET中以便进行进一步的分析。本节将详细介绍这两个步骤&#xff0c;并提供具体的例子…

作者头像 李华
网站建设 2026/4/18 4:30:30

Flutter for OpenHarmony 实战:投票管理系统完整开发指南

Flutter for OpenHarmony 实战&#xff1a;投票管理系统完整开发指南 文章目录 Flutter for OpenHarmony 实战&#xff1a;投票管理系统完整开发指南摘要一、项目背景与功能概述1.1 投票系统的应用场景1.2 应用功能规划1.3 投票规则说明 二、投票系统设计原则2.1 用户界面设计2…

作者头像 李华
网站建设 2026/4/22 2:47:23

终于有人愿意把 SPC 精益本质讲透了

搞生产&#xff0c;做质量&#xff0c;SPC 这三个字听得耳朵起茧。报表没少做&#xff0c;图没少画&#xff0c;真到出了问题&#xff0c;该乱的还是乱。问题出在哪&#xff1f;很多人把 SPC 当数学题&#xff0c;当上级任务&#xff0c;偏偏忘了它最该是什么——一套让过程自己…

作者头像 李华
网站建设 2026/4/22 16:23:24

eScan杀毒软件更新服务器遭入侵传播多阶段恶意软件

印度网络安全公司MicroWorld Technologies开发的eScan杀毒软件更新基础设施遭到未知攻击者入侵&#xff0c;向企业和消费者系统传播持久化下载器恶意软件。Morphisec公司研究员Michael Gorelik表示&#xff1a;"恶意更新通过eScan的合法更新基础设施进行分发&#xff0c;导…

作者头像 李华
网站建设 2026/4/21 21:10:15

大数据领域Kappa架构的分布式计算特性

大数据领域Kappa架构的分布式计算特性:用"流水生产线"思维破解实时与离线的双重难题 关键词:Kappa架构、分布式计算、流处理、事件日志、容错性、水平扩展、一致性 摘要:传统大数据架构中,实时与离线处理的"双系统困境"一直是工程师的噩梦。2014年提出…

作者头像 李华
网站建设 2026/4/18 3:52:04

大模型时代,我这样学习AI技能,不仅没被取代,工资还涨了

01 大模型技术&#xff0c;职业升级的时代引擎 大模型技术的爆发正在重塑就业市场。根据行业观察&#xff0c;大量公司急需懂大模型的工程师&#xff0c;这类岗位的薪资普遍高于传统开发岗。 更为重要的是&#xff0c;如今入行大模型应用开发的门槛已大幅降低。借助开源社区和…

作者头像 李华