一个很简单的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的更多相关文章

  1. HDU 3715 Go Deeper(2-sat)

    HDU 3715 Go Deeper 题目链接 题意:依据题意那个函数,构造x数组.问最大能递归层数 思路:转化为2-sat问题,因为x仅仅能是0.1,c仅仅能是0,1.2那么问题就好办了,对于0, ...

  2. hdu 3715(二分+2-sat)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3715 思路:二分深度,2-sat判断可行性,根据矛盾关系建图:设a=0,a'=1,b=0,b'=1;如 ...

  3. HDU 3715 Go Deeper

    二分答案 + 2-SAT判断 #include<cstdio> #include<cstring> #include<cmath> #include<vect ...

  4. Go Deeper HDU - 3715(2 - sat 水题 妈的 智障)

    Go Deeper Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  5. HDU - 1816 Get Luffy Out *(二分 + 2-SAT)

    题目大意:有N串钥匙,M对锁.每串钥匙仅仅能选择当中一把.怎样选择,才干使开的锁达到最大(锁仅仅能按顺序一对一对开.仅仅要开了当中一个锁就可以) 解题思路:这题跟HDU - 3715 Go Deepe ...

  6. 【图论】2-sat总结

    2-sat总结 2-sat问题,一般表现的形式为.每一个点有两种方式a,b,要么选a,要么选b.而且点点之间有一些约束关系.比如:u和v至少一个选a.那么这就是一个表达式.把a当成真,b当成假,那就是 ...

  7. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  8. hdu图论题目分类

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  9. HDU图论题单

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

随机推荐

  1. jmeter接口测试之登录测试

    注册登录_登陆接口文档 1.登录 请求地址: POST   xxxxxx/Home/Login 请求参数: args={ LoginName:"mtest", // 登录名,可以为 ...

  2. 获取iframe 内元素的方法

    1,原生的方法 首先给iframe 设置 id 属性 var obj = document.getElementById('iframe').contentWindow; setTimeout(fun ...

  3. GridView不換行

    在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全. 解决办法,可以把ScrollVIew给删除 ...

  4. iOS9开发之新增通知行为详解

    苹果在iOS8发布时,收到短信时可以直接在通知栏输入文字并回复,非常炫酷,然而这一功能并未真正开放给开发者.iOS9新增了用户通知行为UIUserNotificationActionBehaviorT ...

  5. OpenCV2学习笔记04:图像的读取与显示

    1. 图像读取:imread() Mat imread( ) 参数介绍: filename: 待加载的文件名称. flags: 此标志用来指定被加载图像的颜色类型(color type).这个标志的取 ...

  6. Qt-获取主机网络信息之QHostAddress

    QHostAddress类提供一个IP地址. 这个类提供一种独立于平台和协议的方式来保存IPv4和IPv6地址. QHostAddress通常与QTcpSocket,QTcpServer,QUdpSo ...

  7. arguments.callee 调用自身

    一.Arguments该对象代表正在执行的函数和调用他的函数的参数.[function.]arguments[n]参数function :选项.当前正在执行的 Function 对象的名字.n :选项 ...

  8. 面试题(C#算法编程题)

    1>用C#写一段选择排序算法,要求用自己的编程风格.答:private int min;    public void xuanZhe(int[] list)//选择排序    {        ...

  9. 用php生成word文档

    一.用windows里面自带的com,然后用php生成word文档 <?php $word= new COM("word.application") or die(" ...

  10. linux(centos)搭建svn

    1.yum install subversion 2.输入rpm -ql subversion查看安装位置 输入 svn --help可以查看svn的使用方法 3.创建svn版本库目录 mkdir - ...