hdu 3715
一个很简单的2-sat的题;
不过比较难想到;
其实也不是很难,可能接触的少了吧!
#include<cstdio>
#include<vector>
#define maxn 10009
using namespace std; struct twosat
{
int n;
vector<int>g[maxn*];
bool mark[maxn*];
int s[maxn*],c; bool dfs(int x)
{
if(mark[x^])return ;
if(mark[x])return ;
mark[x]=;
s[c++]=x;
for(int i=; i<g[x].size(); i++)
if(!dfs(g[x][i]))return ;
return ;
}
void init(int n)
{
this->n=n;
for(int i=; i<*n; i++)g[i].clear();
memset(mark,,sizeof mark);
}
void add_clase(int x,int y)
{
g[x].push_back(y);
}
bool solve(int mid)
{
for(int i=; i<mid*; i+=)
if(!mark[i]&&!mark[i+])
{
c=;
if(!dfs(i))
{
while(c>)mark[s[--c]]=;
if(!dfs(i+))return ;
}
}
return ;
}
} getans;
int a[maxn],b[maxn],c[maxn];
int main()
{
int n,m,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=; i<m; i++)
scanf("%d%d%d",&a[i],&b[i],&c[i]);
int l=,r=m;
int ans=;
while(l<=r)
{
int mid=(l+r)/;
getans.init(n<<);
for(int i=;i<mid;i++)
{
if(c[i]==)
{
getans.add_clase(a[i]<<,b[i]<<|);
getans.add_clase(b[i]<<,a[i]<<|);
}
else if(c[i]==)
{
getans.add_clase(a[i]<<|,b[i]<<|);
getans.add_clase(a[i]<<,b[i]<<);
getans.add_clase(b[i]<<|,a[i]<<|);
getans.add_clase(b[i]<<,a[i]<<);
}
else if(c[i]==)
{
getans.add_clase(a[i]<<|,b[i]<<);
getans.add_clase(b[i]<<|,a[i]<<);
}
}
if(!getans.solve(mid))r=mid-;
else {ans=mid;l=mid+;}
}
printf("%d\n",ans);
}
return ;
}
hdu 3715的更多相关文章
- HDU 3715 Go Deeper(2-sat)
HDU 3715 Go Deeper 题目链接 题意:依据题意那个函数,构造x数组.问最大能递归层数 思路:转化为2-sat问题,因为x仅仅能是0.1,c仅仅能是0,1.2那么问题就好办了,对于0, ...
- hdu 3715(二分+2-sat)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3715 思路:二分深度,2-sat判断可行性,根据矛盾关系建图:设a=0,a'=1,b=0,b'=1;如 ...
- HDU 3715 Go Deeper
二分答案 + 2-SAT判断 #include<cstdio> #include<cstring> #include<cmath> #include<vect ...
- Go Deeper HDU - 3715(2 - sat 水题 妈的 智障)
Go Deeper Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- HDU - 1816 Get Luffy Out *(二分 + 2-SAT)
题目大意:有N串钥匙,M对锁.每串钥匙仅仅能选择当中一把.怎样选择,才干使开的锁达到最大(锁仅仅能按顺序一对一对开.仅仅要开了当中一个锁就可以) 解题思路:这题跟HDU - 3715 Go Deepe ...
- 【图论】2-sat总结
2-sat总结 2-sat问题,一般表现的形式为.每一个点有两种方式a,b,要么选a,要么选b.而且点点之间有一些约束关系.比如:u和v至少一个选a.那么这就是一个表达式.把a当成真,b当成假,那就是 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- hdu图论题目分类
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDU图论题单
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
随机推荐
- 关于工作流之最后Assign给TeamLeader
如果你的单子Buddy验证通过了.然后也进行了Integrate了,然后就可以把这个单子给TL(Team Leader)了. >>>>>>>>>& ...
- 抽象(abstract)升级版变接口(interface) 继承(extends)升级版叫实现(implements) 升级版啊升级版 接口可以多继承
Client --------------------------------------------------- public class Client{ public static void m ...
- 深入理解java的抽象类和接口(转载)
原文链接:http://www.cnblogs.com/dolphin0520/p/3811437.html 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的 ...
- asp.net 后台弹出提示框
1.后台弹出提示信息方法 Response.Write("<scripttype="text/javascript">alert('你所查询的数据不存在!') ...
- 【JAVA】final修饰Field
一.简介 final修饰符可以用来修饰变量.方法.类.final修饰变量时一旦被赋值就不可以改变. 二.final成员变量 成员变量是随类初始化或对象初始化而初始化的.当类初始化的时候,会给类变量分配 ...
- Build Error 6041: Internal build error
Note: Following content is reprinted from the Original article Flexera : Build Error 6041. Only for ...
- 九度OJ 1410 垒积木 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1410 题目描述: 给你一些长方体的积木,问按以下规则能最多垒几个积木. 1 一个积木上面最多只能垒另一个积木. 2 ...
- N个数随机相加得出固定值的排列组合
static double[] iArr = new double[10] { 1,2,3,4,5,6,7,8,9,10 }; static Stack<double> stack = n ...
- web2py--------------用web2py写 django的例子 --------开发环境
我们先从广为人知的例子说起xi 也就是官方的例子,我会在最后给出代码: ============================环境=================== 编译器使用vs code , ...
- gwt 创建 超链接cell (HyperTextCell)
package com.cnblogs.hooligen.client; import com.google.gwt.cell.client.AbstractCell; import com.goog ...