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 |
求大牛的指导!Source Code Problem: 2528 User: chenxuan123456789 Memory: N/A Time: N/A Language: C Result: Runtime Error Source Code #include <stdio.h> #include <stdlib.h> #include <string.h> #define len 100100 typedef struct node { int lchild; int rchild; int col; }Node; Node a[len*16]; int num[10010][2]; int flag[10010],f[10010],dist[10010],cut,hash,mark[len]; int cmp(const void *_a,const void *_b) { int *a=(int*)_a; int *b=(int*)_b; return (*a)-(*b); } void bulit(int s,int e,int step) { int mid; a[step].lchild=s; a[step].rchild=e; a[step].col=0; if(s==e) return; else { mid=(s+e)>>1; bulit(s,mid,2*step); bulit(mid+1,e,2*step+1); } } void insert(int s,int e,int step,int c) { int mid; if(a[step].lchild>=s&&a[step].rchild<=e) { a[step].col=c; return ; } if(a[step].col) { a[2*step].col=a[step].col; a[2*step+1].col=a[step].col; a[step].col=0; } mid=(a[step].lchild+a[step].rchild)>>1; if(e<=mid) insert(s,e,2*step,c); else if(s>mid) insert(s,e,2*step+1,c); else { insert(s,mid,2*step,c); insert(mid+1,e,2*step+1,c); } } void print(int s,int e,int step) { int mid; if(s==e) { printf("%d %d %d %d\n",step,a[step].lchild,a[step].rchild,a[step].col); return ; } else { mid=(s+e)>>1; print(s,mid,2*step); print(mid+1,e,2*step+1); printf("%d %d %d %d\n",step,a[step].lchild,a[step].rchild,a[step].col); } } void input(int n) { int i,p=0; for(i=1;i<=n;i++) { scanf("%d %d",&num[i][0],&num[i][1]); if(!flag[num[i][0]]) { f[p++]=num[i][0]; flag[num[i][0]]=1; } if(!flag[num[i][1]]) { f[p++]=num[i][1]; flag[num[i][1]]=1; } } qsort(f,p,sizeof(f[0]),cmp); hash=1; for(i=0;i<p;i++) { dist[f[i]]=hash++; } hash--; bulit(1,hash,1); for(i=1;i<=n;i++) insert(dist[num[i][0]],dist[num[i][1]],1,i); } void solve(int s,int e,int step) { int mid; if(!mark[a[step].col]&&a[step].col!=-1&&a[step].col) { cut++; mark[a[step].col]=1; return ; } if(mark[a[step].col]) return; mid=(s+e)>>1; solve(s,mid,2*step); solve(mid+1,e,2*step+1); } int main() { int c,n; scanf("%d",&c); while(c--) { scanf("%d",&n); input(n); cut=0; //print(1,hash,1); solve(1,hash,1); printf("%d\n",cut); } return 1; } /* 2 5 1 4 2 6 8 10 3 4 7 10 */ Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator