Hoj 2632 Blanks in a Table
来源:互联网 发布:淘宝客营销计划条件 编辑:程序博客网 时间:2024/05/21 21:42
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2632
题意:
设a代表空,a'代表非空。
b代表空,b'代表非空。
那么:
有n个条件要求a和b不可同时为空,则:a->b',b->a'
有p个条件要求a和b至少有一个为空,则:a'->b,b'->a
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <stack>#include <queue>#include <algorithm>#include <iostream>using namespace std;#define Maxn (1005 * 2)#define Maxm (2005 * 4)struct Edge{int a,b;}edge[Maxm];int first[Maxn],next[Maxm];int total;//scc相关int sccno[Maxn];bool instack[Maxn];int dfn[Maxn];int low[Maxn];int dfs_clock;int scc_cnt;stack <int> st;//2sat相关void addEdge(int a,int b){edge[total].a = a,edge[total].b = b;next[total] = first[a];first[a] = total++;}void init(){total = 0;memset(first,-1,sizeof(first));}void tarjan(int u){ dfn[u] = low[u] = ++dfs_clock; st.push(u); instack[u] = true; for(int i=first[u];i!=-1;i=next[i]) { int v = edge[i].b; if(!dfn[v]) { tarjan(v); low[u] = min(low[u],low[v]); } else if(instack[v]) { low[u] = min(low[u],dfn[v]); } } if(dfn[u] == low[u]) { scc_cnt++; while(1) { int v = st.top(); st.pop(); instack[v] = false; sccno[v] = scc_cnt; if(u == v) break; } }}void find_scc(int start,int n){scc_cnt = dfs_clock = 0;memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low)); memset(instack,false,sizeof(instack)); while(!st.empty()) { st.pop(); } for(int i=start;i<=n;i++) { if(!dfn[i]) tarjan(i); }}bool twoSet(int start,int n,int add){find_scc(start,n);for(int i=start;i<=n;i++){int temp;if(i>add) temp = i-add;else temp = i+add;if(sccno[i] == sccno[temp]) return false;}return true;}int main(){#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endifint n,m,p;int a,b;while(scanf(" %d %d %d",&m,&n,&p)!=EOF){init();//不可同时为空for(int i=0;i<n;i++){scanf(" %d %d",&a,&b);addEdge(a,b+m);addEdge(b,a+m);}//至少有一个为空for(int i=0;i<p;i++){scanf(" %d %d",&a,&b);addEdge(b+m,a);addEdge(a+m,b);}if(!twoSet(1,2*m,m)){puts("No");continue;}puts("Yes");}return 0;}
- Hoj 2632 Blanks in a Table
- A. Maximum in Table
- A. Maximum in Table
- A - Maximum in Table
- (翻译)完型填空(Fill in the Blanks)
- 动态规划-Largest Rectangle in a Histogram- HOJ 1506
- delete duplicate rows in a table
- CF 509A(Maximum in Table-暴力)
- CodeForces 509A Maximum in Table
- HOJ A Simple Problem
- HOJ 1001 A+B
- hoj 还是A+B
- hoj 1003 A-B
- Centering text in a table in Twitter Bootstrap
- Fill in the Blanks: Using Math to Turn Lo-Res Datasets Into Hi-Res Samples
- Show how to print a table in a html page
- a table can be shown in a labelControl
- Check if a table or field exists in a database
- java和javascript正则表达式的区别
- nonatomic, retain,weak,strong用法详解
- C++ explicit关键字应用方法详解
- VIM配置升级版
- 7-ZIP解压linux下的压缩包格式
- Hoj 2632 Blanks in a Table
- HDU 4648 Magic Pen 6
- To compile mplayer on Mac OS X
- hdu——1166(数据结构之树状数组的简单应用)
- HttpClient 入门
- 认识TCP/IP协议--简介
- C++ STL视频教程
- 如何去理解递归,想到递归,运用递归
- java服务器