zoukankan      html  css  js  c++  java
  • hdu3062 2-SAT模板

    题意:中文题不用解释

    思路:这题讲的就是2-sat,如果想知道什么事2-sat可以看看大牛的http://blog.csdn.net/pi9nc/article/details/11849843,每个结点有两种状态,u结点的一个状态与v结点的一个状态矛盾,那么就还有另外两个状态时不矛盾的,那么我们把它连边。最后强连通,如果一个结点的两个状态在一个连通图中,那么就矛盾了。

    #include<stdio.h>
    #include<string.h>
    const int maxn = 3000;
    
    struct node
    {
    	int v,next;
    }eg[maxn*maxn];
    int head[maxn];
    int dfn[maxn],low[maxn],sta[maxn],insta[maxn],belong[maxn];
    int tot,color,top,Index,n;
    void add(int a,int b)
    {
    	eg[tot].v= b;
    	eg[tot].next = head[a];
    	head[a] = tot++;
    }
    void tarjan(int u)
    {
    	dfn[u] = low[u] = ++Index;
    	sta[top++] = u;
    	insta[u] = 1;
    	for(int i=head[u];i+1;i= eg[i].next)
    	{
    		int v= eg[i].v;
    		if(!dfn[v])
    		{
    			tarjan(v);
    			low[u] = low[u] < low[v] ? low[u] : low[v];
    		}else if(insta[v])
    			low[u] = low[u] < dfn[v] ? low[u] : dfn[v];
    	}
    	if(low[u] == dfn[u])
    	{
    		int v;
    		color++;
    		do
    		{
    			v= sta[--top];
    			insta[v] = 0;
    			belong[v] =color;
    		}while(v != u);
    	}
    }
    void init()
    {
    	tot = color = top = Index =0;
    	memset(dfn,0,sizeof(dfn));
    	memset(insta,0,sizeof(insta));
    	memset(belong,0,sizeof(belong));
    	memset(head,-1,sizeof(head));
    }
    void work()
    {
    	int i;
    	for(i=0;i<2*n;i++)
    	{
    		if(!dfn[i])tarjan(i);
    	}
    	int flag = 0;
    	for(i=0;i<n;i++)
    	{
    		if(belong[i*2] == belong[i*2+1])
    		{
    			break;
    		}
    	}
    	if(i == n) printf("YES
    ");
    	else printf("NO
    ");
    
    }
    int main()
    {
    	int m,a1,a2,b1,b2;
    	while(~scanf("%d",&n))
    	{
    		init();
    		scanf("%d",&m);
    		while(m--)
    		{
    			scanf("%d%d%d%d",&a1,&a2,&b1,&b2);
    		//	printf("%d %d
    ",a1*2+a2,b1*2 + !b2);
    		//	printf("%d %d
    ",b1*2 + b2,a1*2+!a2);
    			add(a1*2 + b1,a2*2 + 1 -b2);
    			add(a2*2 + b2,a1*2 + 1 -b1);
    		}
    		work();
    	}
    
    	return 0;
    }
    /*
    
    
      2 
    1
    0 1 1 1
    
      */
    
  • 相关阅读:
    DOM型XSS(pikachu)
    第十周笔记
    第九周数据结构
    第八周数据结构笔记
    第七周笔记
    第六周笔记
    第五周数据结构
    第四周笔记
    数据结构(第三周)
    数据结构—第二周学习笔记
  • 原文地址:https://www.cnblogs.com/BruceNoOne/p/3864110.html
Copyright © 2011-2022 走看看