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 |
哪位大牛帮忙看看为什么RE啊??/* * poj 1988 */ #include <iostream> #include <cmath> using namespace std; #define N 30008 int t=0; //减去本身; int rank[N]={0}, p[N], size[N], value[N], mark[N]={0}; int find( int x ) { if( x==p[x] ) return (p[x]); else return find( p[x] ); } int findx( int x ) { if( x==p[x] ) return (t+value[p[x]]); t+=value[x]; return findx( p[x] ); } void merge( int root1, int root2 ) { int x=find( root1 ); int y=find( root2 ); if( x==y ) return ; if( rank[x]>rank[y] ) { p[y] = x; size[x]+=size[y]; value[x] = value[x]+size[y]; } else{ p[x] = y; //mark[x] = 1; value[x] = size[y] - value[y]; size[y] += size[x]; //value if( rank[x]==rank[y] ) rank[y]++; } } int main() { //freopen( "c:\\in.txt" , "r", stdin ); //freopen( "c:\\out.txt" , "w", stdout ); int n, i, j, k; int x, y; char c; int a, b; scanf( "%d", &n ); getchar(); for( i=1; i<=n; i++ ) { p[i] = i; value[i]=0; size[i] = 1; } for( i=1; i<=n; i++ ) { scanf( "%c", &c ); if( c=='M' ) { scanf( "%d %d", &x, &y ); getchar(); a=find( x ); b=find( y ); merge(a,b); } else if( c=='C' ) { scanf( "%d", &x ); getchar(); t=0; a=findx(x); printf( "%d\n", a ); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator