| ||||||||||
| 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