#17167: 是不是不能用動態產生陣列


zs10530815 (神修)

學校 : 臺北市立中山女子高級中學
編號 : 59504
來源 : [1.171.162.78]
最後登入時間 :
2020-07-04 21:19:28
b412. 【記憶中】之記憶中的并查集 | From: [140.122.184.249] | 發表日期 : 2019-03-21 16:20

#include<cstdio>
struct Node
{
int *leader;
int** his;
int id;
};
Node* no;
bool test(int a,int b)
{
return no[a].leader==no[b].leader;
}
int main()
{
int n,m,c,x,y,day=0;
bool ans;
scanf("%d %d",&n,&m);
no=new Node[n];
for(int i=0;i<n;i++)
{
no[i].id=i;
no[i].leader=&no[i].id;
no[i].his=new int*[m];
}
for(int i=0;i<m;i++)
{
day++;
scanf("%d",&c);
if(ans!=0)
c=c^ans;
switch(c)
{
case 0:
scanf("%d",&x);
if(ans!=0)
x=x^ans;
for(int i=0;i<n;i++)
{
no[i].leader=no[i].his[day];
}
break;
case 1:
case 2://x<y??
scanf("%d %d",&x,&y);
if(ans!=0)
{
x=x^ans;
y=y^ans;
}
x--;
y--;
if(c==1)
{
no[y].leader=no[x].leader;
}else
{
ans=test(x,y);
printf("%d\n",ans);
}
break;
}
for(int i=0;i<n;i++)
{
no[i].his[day]=no[i].leader;
}
}
return 0;
}

 

還是n*m的陣列太大了?

 
ZeroJudge Forum