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> using namespace std; class UnionFind{ public: UnionFind(int n); ~UnionFind(){delete [] parent;delete [] root;} int Find(int e); void Union(int i,int j); bool *root; int *parent; int *up; int *sum; }; UnionFind::UnionFind(int n) { root=new bool[n+1]; parent=new int[n+1]; up=new int [n+1]; sum=new int [n+1]; for(int e=1;e<=n;e++){ parent[e]=1; root[e]=true; up[e]=0; sum[e]=1;} } int UnionFind::Find(int e) { up[e]=0; int j=e; while(!root[j]) j=parent[j]; int f=e; while(f!=j){ int pf=parent[f]; parent[f]=j; f=pf; up[e]++; //sum[j]++; } return j; } void UnionFind::Union(int i,int j) { if(parent[i]<parent[j]){ up[i]=sum[j]; parent[j]+=parent[i]; sum[j]+=sum[i]; root[i]=false; parent[i]=j;} else { up[j]=sum[i]; parent[i]+=parent[j]; sum[i]+=sum[j]; root[j]=false; parent[j]=i;} } int main() { int n,i; cin>>n; UnionFind u(n); char c; int a,b; for(i=0;i<n;i++) { cin>>c; switch(c) { case'M': cin>>a>>b; u.Union(u.Find(a),u.Find(b)); break; case'C': cin>>a; u.Find(a); cout<<u.parent[u.Find(a)]-u.up[a]-1<<endl; break; } } return 0; } 如题,谢了,实在找不出错了 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator