poj 2723 Get Luffy Out 2-SAT
2015-07-11 17:28
330 查看
因为过一个门之后才能到下一个门,所以我们直接二分门数,对于每对钥匙a、b,a&b=0,所以a到n+b加边,b到n+a加边。而对于每个门对于的钥匙a、b两个必须存在一个,所以n+a到b,b+n到a加边即可。
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<iostream> #define maxn 4505 using namespace std; int low[maxn],dnf[maxn],que[maxn],tear,head[maxn],c[maxn],mark[maxn]; bool map[maxn][maxn]; vector<int>g[maxn]; void init(int n){ for(int i=1;i<=n;i++) g[i].clear(); } int cal,tot; void tarjin(int p){ dnf[p]=low[p]=cal++; int i,k; k=(int)g[p].size(); que[tear++]=p; for(i=0;i<k;i++){ int v=g[p][i]; if(!dnf[v]){ tarjin(v); low[p]=min(low[p],low[v]);//如果儿子就比较low } else if(!mark[v]){ low[p]=min(low[p],dnf[v]);//与栈里面的点进行比较,如果mark[i]有值就代表已经出栈了。 } } if(low[p]==dnf[p]){ while(tear>0){ mark[que[tear-1]]=tot; if(que[tear-1]==p){ tear--; break; } tear--; } tot++; } } int solve(int n){ int i; tear=0; cal=1; tot=1; memset(dnf,0,sizeof(dnf)); memset(c,0,sizeof(c)); memset(mark,0,sizeof(mark)); for(i=1;i<=2*n;i++){ tear=0; if(!dnf[i]) tarjin(i); } for(i=1;i<=n;i++){ if(mark[i]==mark[n+i]) return 0; } return 1; } void add(int a,int b){ g[a].push_back(b); } struct pi{ int a; int b; }pp[maxn],pp1[maxn]; int main() { int i,n,m; while(cin>>n>>m){ if(n==0&&m==0) break; init(4*n); for(i=1;i<=n;i++){ scanf("%d%d",&pp[i].a,&pp[i].b); pp[i].a++; pp[i].b++; } for(i=1;i<=m;i++){ scanf("%d%d",&pp1[i].a,&pp1[i].b); pp1[i].a++; pp1[i].b++; } int le,ri,mid; le=1; ri=m; while(le<=ri){ mid=(le+ri)/2; init(4*n); for(i=1;i<=n;i++){ add(pp[i].a,2*n+pp[i].b); add(pp[i].b,2*n+pp[i].a); } for(i=1;i<=mid;i++){ add(2*n+pp1[i].a,pp1[i].b); add(2*n+pp1[i].b,pp1[i].a); } if(solve(2*n)) le=mid+1; else ri=mid-1; } printf("%d\n",ri); } }
相关文章推荐
- 监控RMAN操作进度的脚本
- 述说
- audio_coding模块分析和audio_conference_mixer模块分析
- windows7下硬盘安装ubuntu14.04
- eclipse使用jdk
- 重复造轮子感悟 – XLinq性能提升心得
- BZOJ 1012 最大数maxnumber
- win7安装 browser-sync 安装使用笔记
- Android https详解
- iOS项目中常用的第三方开源库
- Android总结之Animation
- php中重写和final关键字的使用
- [LeetCode] Lowest Common Ancestor of a Binary Search Tree
- 1.4 Java发展简史
- 黑马程序员——Foundation---NSSet,NSDictionary,NSNumber,NSDate,NSValue
- poj 3678 Katu Puzzle 2-SAT
- VS2010+Qt5+OSG3.0开发环境搭建
- php中常用的几个魔法常量
- 在drawable下的xml文件中layer-list的用二:在layer-list下的item标签中使用shape画图,以及backgroun和src的区别
- 嵌入式项目开发调试流程,常见问题,解决方法