POJ1291-并查集/dfs(二)
;x; return fa[x] = find( fa[x] ); } void union_ab( int x,int y ){ int fax = find( x ); int fay = find( y ); if( rank[ fax ]>rank[ fay ] ){ fa[ fay ] = fax; rank[ fax ] += rank[ fay ]; } else { fa[ fax ] = fay; rank[ fay ] += rank[ fax ]; } } void dfs( int x,int n ){ vis[ x ] = 1; if( x<=n ){ vis[ x+n ] = 1; Cnt_true ++ ; //若x是正确的,则x+n则是错误的,同时也不用再去访问。 } else { vis[ x-n ] = 1; Cnt_false ++ ; } for( int i=head[x];i!=-1;i=edge[i].next ){ int y = edge[i].v; if( !vis[y] ){ dfs( y,n ); } } } int main(){ int n; while( scanf("%d",&n)==1,n ){ init( n*2 ); bool f = true; char s1[ 24 ],s2[ 24 ],s3[ 24 ]; int x1,y1,x2,y2; int fax,fay; for( int i=1;i<=n;i++ ){ &
| 评论 |
|
|
