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

lc3445

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

可以bfs/dfs/union判环

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

class Solution {

public:

vector<vector<int>> supersequences(vector<string>& words) {

// 收集有哪些字母,同时建图

int all = 0, mask2 = 0;

vector<int> g26{};

for (auto& s : words) {

int x = s0 - 'a', y = s1 - 'a';

all |= 1 << x | 1 << y;

if (x == y) {

mask2 |= 1 << x;

}

gx.push_back(y);

}

// 判断是否有环

auto has_cycle = \&(int sub) -> bool {

int color26{};

auto dfs = \&(this auto&& dfs, int x) -> bool {

colorx = 1;

for (int y : gx) {

// 只遍历在 sub 中的字母

if ((sub >> y & 1) == 0) {

continue;

}

if (colory == 1 || colory == 0 && dfs(y)) {

return true;

}

}

colorx = 2;

return false;

};

for (int i = 0; i < 26; i++) {

// 只遍历在 sub 中的字母

if (colori == 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++) {

cnti = (all >> i & 1) + ((all ^ sub) >> i & 1);

}

ans.push_back(cnt);

}

return ans;

}

};

相关推荐
leisoo80971 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
luj_17683 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
郝学胜-神的一滴4 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆4 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
Water_Sunzhipeng4 小时前
2024牛客暑期多校训练营1
算法
hetao17338374 小时前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法
技术小黑4 小时前
RNN算法实战系列06 | LSTM 实现糖尿病探索与预测
rnn·算法·lstm
疯狂打码的少年5 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
wabs6665 小时前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
CIO_Alliance5 小时前
AI认知系列(3)| 数据、算法、算力、场景四要素协同
人工智能·算法·ipaas·系统集成·企业cio联盟·企业级ai化转型