这是AC的代码
#include<stdio.h>
const int N =100005;
struct node {
int fore,next;
}a[N];
bool b[N];
void add(int p,int k) {//k->p->k.next
a[a[k].next].fore=p;
a[p].fore=k;
a[p].next=a[k].next;
a[k].next=p;
}
int main() {
// freopen("in.txt","r",stdin);
a[0]={0,1};
a[1]={0,N};
a[N]={1,N};
int n;//看好这个n,设n在main()里面
scanf("%d",&n);
int k,p;
int i=2;
for(i;i<=n;i++) {
scanf("%d%d",&k,&p);
if(p==0) {
add(i,a[k].fore);
}
else {
add(i,k);
}
}
b[0]=true;
scanf("%d",&p);
while(p--) {
scanf("%d",&k);
b[k]=true;
}
i=0;
for(i;a[i].next!=i;i=a[i].next) {
if(!b[i]) printf("%d ",i);
}
// fclose(stdin);
return 0;
}
可是,如果我将int n写在main()外面,其余不变,即
#include<stdio.h>
const int N =100005;
struct node {
int fore,next;
}a[N];
int n;//设n在main()外面
bool b[N];
void add(int p,int k) {//k->p->k.next
a[a[k].next].fore=p;
a[p].fore=k;
a[p].next=a[k].next;
a[k].next=p;
}
int main() {
// freopen("in.txt","r",stdin);
a[0]={0,1};
a[1]={0,N};
a[N]={1,N};
scanf("%d",&n);
int k,p;
int i=2;
for(i;i<=n;i++) {
scanf("%d%d",&k,&p);
if(p==0) {
add(i,a[k].fore);
}
else {
add(i,k);
}
}
b[0]=true;
scanf("%d",&p);
while(p--) {
scanf("%d",&k);
b[k]=true;
}
i=0;
for(i;a[i].next!=i;i=a[i].next) {
if(!b[i]) printf("%d ",i);
}
// fclose(stdin);
return 0;
}
就会 WA
为什么啊?求大佬解答!