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:两段代码为何一个WA,一个AC?In Reply To:两段代码为何一个WA,一个AC? Posted by:dut200901102 at 2010-05-27 13:29:21 哥,两个都wa啊,我试了 > #include <iostream> > #include <cstdio> > #include <cstring> > #include <algorithm> > > using namespace std; > > const int MAXN=30010; > > int p[MAXN],num[MAXN],c[MAXN]; > > void make_set() > { > for(int i=1;i<=MAXN;++i) > { > p[i]=i; > num[i]=1; > c[i]=0; > } > } > > int find_set(int x) > { > if(p[x]!=x) > { > int px=p[x]; > p[x]=find_set(p[x]);//就在这个位置,修改一下就AC了 ,但是逻辑上没有任何差别阿 > c[x]+=c[px]; > } > return p[x]; > } > > void union_set(int a,int b) > { > int x=find_set(a); > int y=find_set(b); > if(x==y) > { > return ; > } > p[y]=x; > c[y]+=num[x]; > num[x]+=num[y]; > } > > int main() > { > freopen("in.txt","r",stdin); > char ch; > int p,a,b; > scanf("%d",&p); > make_set(); > while(p--) > { > while(scanf("%c", &ch)) > { > if(ch!='\n'&&ch!=' ') > break; > } > if(ch=='M') > { > scanf("%d%d",&a,&b); > union_set(a,b); > continue; > } > if(ch=='C') > { > scanf("%d",&a); > b=find_set(a); > printf("%d\n",num[b]-c[a]-1); > } > } > return 0; > } > ———————————————————————————————————————— > #include <iostream> > #include <cstdio> > #include <cstring> > #include <algorithm> > > using namespace std; > > const int MAXN=30010; > > int p[MAXN],num[MAXN],c[MAXN]; > > void make_set() > { > for(int i=1;i<=MAXN;++i) > { > p[i]=i; > num[i]=1; > c[i]=0; > } > } > > int find_set(int x) > { > if(p[x]!=x) > { > c[x]+=c[p[x]]; > p[x]=find_set(p[x]); > } > return p[x]; > } > > void union_set(int a,int b) > { > int x=find_set(a); > int y=find_set(b); > if(x==y) > { > return ; > } > p[y]=x; > c[y]+=num[x]; > num[x]+=num[y]; > } > > int main() > { > freopen("in.txt","r",stdin); > char ch; > int p,a,b; > scanf("%d",&p); > make_set(); > while(p--) > { > while(scanf("%c", &ch)) > { > if(ch!='\n'&&ch!=' ') > break; > } > if(ch=='M') > { > scanf("%d%d",&a,&b); > union_set(a,b); > continue; > } > if(ch=='C') > { > scanf("%d",&a); > b=find_set(a); > printf("%d\n",num[b]-c[a]-1); > } > } > return 0; > } > 前面的AC了 后面的WA了 无语了 路过的大牛现身指点一下把 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator