标签:des style blog http color io os ar java
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 570 Accepted Submission(s): 225
#include <iostream> #include <cstdio> #include <cstring> #include <stack> #include <map> #include <cmath> #include <vector> using namespace std; const int N = (1<<13); int n , m , st[N<<1] ,top; int eh[N] , et[N*N] , nxt[N*N] , tot ; bool mark[N<<2]; struct node { int x , y ; } key[N<<1] , door[N<<1]; void init() { tot = 0 ; memset( eh , -1 , sizeof eh ); memset( mark ,false , sizeof mark ); } void addedge( int u , int v ) { et[tot] = v , nxt[tot] = eh[u] , eh[u] = tot++ ; et[tot] = u , nxt[tot] = eh[v] , eh[v] = tot++ ; } bool dfs( int u ) { if( mark[u] ) return true; if( mark[u^1] ) return false ; mark[u] = true ; st[top++] = u ; for( int i = eh[u] ; ~i ; i = nxt[i] ){ int v = et[i]; if( !dfs(v^1) ) return false; } return true; } bool solve() { for( int i = 0 ; i < 4 * n ; i += 2 ){ if( !mark[i] && !mark[i+1] ){ top = 0 ; if( !dfs(i) ){ while( top > 0 ) mark[ st[--top] ] = false ; if( !dfs(i+1) ) return false; } } } return true; } bool test( int dep ) { init(); for( int i = 0 ; i < n ; ++i ){ addedge( 2*key[i].x , 2*key[i].y ); } for( int i = 0 ; i < dep ; ++i ){ addedge(2*door[i].x^1,2*door[i].y^1); } return solve(); } void run() { int x , y ; // cout << N <<endl; for( int i = 0 ; i < n ; ++i ){ scanf("%d%d",&key[i].x,&key[i].y); } for( int i = 0 ; i < m ; ++i ){ scanf("%d%d",&door[i].x,&door[i].y); } int l = 0 , r = m , ans = 0 ; while( l <= r ) { int mid = ( l+r )>>1; if( test(mid) ) ans = mid , l = mid + 1 ; else r = mid - 1; } printf("%d\n",ans); } int main() { #ifdef LOCAL freopen("in.txt","r",stdin); #endif // LOCAL while( scanf("%d%d",&n,&m) ){ if( !n && !m ) break; run(); } }
标签:des style blog http color io os ar java
原文地址:http://www.cnblogs.com/hlmark/p/4021639.html