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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu下查看apk签名信息

    ubuntu下查看apk签名信息解压apk,使用命令:keytool-printcert-fileMETA-INF/CERT.RSA可以查看签名文件信息:所有者:C=Lily签发人:C=Lily序列号:523339c8有效期:TueOct2216:39:36CST2013至MonFeb2216:39:36CST3013证书指纹:   MD5:11:D8:65:

    2022年6月1日
    57
  • 数据库删除语句[通俗易懂]

    数据库删除语句[通俗易懂]Delete:删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行)。删除某一行:Deletefrom数据表名称where列名称=值;删除所有行:Delete*from数据表名称Drop:删除数据表或数据库,或删除数据表字段。删除数据库:dropdatabase数据库名称删除数据表:(表的结构、属性、索引也会被删除)

    2025年8月19日
    2
  • Netty权威指南V2.0版_javascript权威指南第七版

    Netty权威指南V2.0版_javascript权威指南第七版作者:李林锋著作出版发行:北京:电子工业出版社,2015.04ISBN号:978-7-121-25801-5页数:554开本:16开主题词:JAVA语言-程序设计-指南中图法分类号:TP312-62(工业技术->自动化技术、计算机技术->计算技术、计算机技术->计算机软件)内容提要:《Netty权威指南(第2版)…

    2022年10月2日
    4
  • intellij idea 2022.01激活码【2022.01最新】

    (intellij idea 2022.01激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月1日
    197
  • uniapp,小程序上传图片

    uniapp,小程序上传图片html<image@click=”chooseImage”:src=”pic”class=”toux”mode=””></image>jschooseImage(){ var_this=this uni.chooseImage({ count:1,//默认9 sizeType:[‘original’,’compressed’],//可以指定是原图还是压缩图,默认二者都有 sourceType:[‘album’,’came

    2022年6月16日
    35
  • 简单网络管理协议SNMP(史上最全)

    简单网络管理协议SNMP(史上最全)简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议。在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。现在,已经有了SNMPv3版本。SNMP版本…

    2022年10月17日
    2

发表回复

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

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