| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
大牛帮下 看看是什么导致效率低下?#include <iostream> #include <cstdio> #include <cmath> #include <cstdlib> double DTABLE[ 1002 ][ 1002 ]; using namespace std; int parent[ 1002 ]; int status[ 1002 ]; int x[ 1002 ]; int y[ 1002 ]; int Find( int i ) { int j = i; while( parent[ j ] > 0 ) j = parent[ j ]; if( i == j ) return j; //待查节点为根节点 while( parent[ parent[ i ] ] > 0 ) {//压缩路径 并更新up int k = i; parent[ i ] = j; i = parent[ k ]; } return j; } // // void Union( int L, int R ) { if( parent[ L ] < parent[ R ] ) { parent[ L ] += parent[ R ]; parent[ R ] = L; } else { parent[ R ] += parent[ L ]; parent[ L ] = R; } }//Union int main() { freopen( "F:\\ACM\\Test_Data\\pku2236.in", "r", stdin ); freopen( "F:\\ACM\\Test_Data\\pku2236.out", "w", stdout ); // UnionFind uf( 1002 ); int N, D; double fD; char order[ 2 ]; int i, j; int id, pc1, pc2; scanf( "%d%d", &N, &D ); fD = D; for( i = 1; i <= N; ++i ) { scanf( "%d%d", &x[ i ], &y[ i ] ); } memset( parent, -1, 1002*sizeof( int ) ); memset( status, 0, 1002*sizeof( int ) ); memset( DTABLE, 0, 1002*1002*sizeof( double ) ); while( scanf( "%s", order ) != EOF ) { if( order[ 0 ] == 'O' ) { scanf( "%d", &id ); int cx = x[ id ]; int cy = y[ id ]; status[ id ] = 1; for( i = 1; i<=N; ++i ) { if( i != id && status[ i ] == 1 ) { int idroot = Find( id ); int iroot = Find( i ); if( idroot == iroot ) continue; if( DTABLE[ i ][ id ] == 0 ) { DTABLE[ i ][ id ] = hypot(cx - x[ i ], cy - y[ i ]); DTABLE[ id ][ i ] = DTABLE[ i ][ id ]; } if( DTABLE[ i ][ id ] <= fD ) Union( idroot, iroot ); } } } else { scanf( "%d%d\n", &pc1, &pc2 ); if( Find( pc1 ) == Find( pc2 ) ) printf( "SUCCESS\n" ); else printf( "FAIL\n" ); }//else }//while return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator