HDU 3715 Go Deeper(2-sat)

HDU 3715 Go Deeper(2-sat)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

HDU 3715 Go Deeper

题目链接

题意:依据题意那个函数,构造x数组。问最大能递归层数

思路:转化为2-sat问题,因为x仅仅能是0。1,c仅仅能是0,1。2那么问题就好办了,对于0, 1, 2相应各自是3种表达式,然后二分深度,搞2-sat就可以

代码:

#include <cstdio>#include <cstring>#include <cstdlib>#include <vector>#include <algorithm>using namespace std;const int MAXNODE = 205;struct TwoSet {	int n;	vector<int> g[MAXNODE * 2];	bool mark[MAXNODE * 2];	int S[MAXNODE * 2], sn;	void init(int tot) {		n = tot * 2;		for (int i = 0; i < n; i += 2) {			g[i].clear();			g[i^1].clear();		}		memset(mark, false, sizeof(mark));	}	void add_Edge(int u, int uval, int v, int vval) {		u = u * 2 + uval;		v = v * 2 + vval;		g[u^1].push_back(v);		g[v^1].push_back(u);	}	void delete_Edge(int u, int uval, int v, int vval) {		u = u * 2 + uval;		v = v * 2 + vval;		g[u^1].pop_back();		g[v^1].pop_back();	}	bool dfs(int u) {		if (mark[u^1]) return false;		if (mark[u]) return true;		mark[u] = true;		S[sn++] = u;		for (int i = 0; i < g[u].size(); i++) {			int v = g[u][i];			if (!dfs(v)) return false;		}		return true;	}	bool solve() {		for (int i = 0; i < n; i += 2) {			if (!mark[i] && !mark[i + 1]) {				sn = 0;				if (!dfs(i)){					for (int j = 0; j < sn; j++)						mark[S[j]] = false;					sn = 0;					if (!dfs(i + 1)) return false;				}			}		}		return true;	}} gao;const int N = 10005;int t, n, m;int a[N], b[N], c[N];bool judge(int dep) {	gao.init(n);	for (int i = 0; i < dep; i++) {		if (c[i] == 0)			gao.add_Edge(a[i], 1, b[i], 1);		else if (c[i] == 1) {			gao.add_Edge(a[i], 0, a[i], 1);			gao.add_Edge(a[i], 0, b[i], 1);			gao.add_Edge(b[i], 0, a[i], 1);			gao.add_Edge(b[i], 0, b[i], 1);		} else			gao.add_Edge(a[i], 0, b[i], 0);	}	return gao.solve();}int main() {	scanf("%d", &t);	while (t--) {		scanf("%d%d", &n, &m);		for (int i = 0; i < m; i++)			scanf("%d%d%d", &a[i], &b[i], &c[i]);		int l = 0, r = m + 1;		while (l < r) {			int mid = (l + r) / 2;			if (judge(mid)) l = mid + 1;			else r = mid;		}		printf("%d\n", l - 1);	}	return 0;}

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116968.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python中通过PyPDF2实现PDF合并

    Python中通过PyPDF2实现PDF合并场景PyPDF2是一个纯pythonPDF库,能够分割、合并、裁剪和转换PDF文件的页面。它还可以向PDF文件中添加自定义数据、查看选项和密码。它可以从PDF检索文本和元数据,还可以将整个文件合并在一起。PyPDF21.26.0文档:https://pythonhosted.org/PyPDF2/实现新建PDF1新建PDF2使用pip安装pypddf2…

    2022年6月23日
    24
  • python3.6.0-32 sqlite tkdnd tkinterdnd2 拖拽 快捷方式管理

    python3.6.0-32 sqlite tkdnd tkinterdnd2 拖拽 快捷方式管理

    2021年6月8日
    134
  • 【菜鸟学Python】案例一:汇率换算「建议收藏」

    【菜鸟学Python】案例一:汇率换算「建议收藏」汇率换算V1.0案例描述:设计一个汇率换算器程序,其功能是将外币换算成人民币,或者相反案例分析:分析问题:分析问题的计算部分;确定问题:将问题划分为输入、处理及输出部分;设计算法:计算部分

    2022年7月5日
    20
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友

    8年软件测试工程师感悟——写给还在迷茫中的朋友这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经基本饱和。当然,我说的是最基础的功能测试的岗位需求已经很少了,而自动化、性能、安全乃至于以后可能出现的大数据测试、AI测试仍存在着非常多的机会。“长江后浪推前浪,前浪死在沙滩上”,曾经一句让人…

    2022年9月19日
    0
  • 宇宙简史|生物学家也要了解的物理

    宇宙简史|生物学家也要了解的物理本文转载自"环球地理志",己获授权“盘古开天辟地”天地混沌如鸡子盘古生其中万八千岁、天地开辟阳清为天、阴浊为地盘古在其中一日九变神于天、圣于地▼◤围绕北落师门的圆盘状宇…

    2022年5月8日
    75
  • PWM原理 PWM频率与占空比详解

    PWM原理 PWM频率与占空比详解什么是PWM​脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。​]…

    2022年6月25日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号