程序一点不变,改变输入方式就过了这是为啥,蒟蒻求助
查看原帖
程序一点不变,改变输入方式就过了这是为啥,蒟蒻求助
141600
can‘you星痕楼主2020/5/27 18:52

一开始就普通的写了一段,测试点的数据下载都过了,但跑出来就是RE;代码如下

#include<iostream>
using namespace std;
struct st{
 int head;
 int value;
 int end;
}n[200010];
int main(){
 
 int n1,m1,i,k,p,j;
 cin>>n1;
 for(int t=1;t<=n1;t++){
 	n[t].end=0;
 	n[t].head=0;	
 	n[t].value=t;
 }
 n[0].end=1;
 n[1].head=0;n[1].end=-1;n[1].value=1;
 for(i=2;i<=n1;i++){
 	cin>>k>>p;
 	if(p==0){n[i].head=n[k].head;n[i].end=k;n[k].head=i;n[n[i].head].end=i;}
     else{n[i].head=k;n[i].end=n[k].end;n[n[k].end].head=i;n[k].end=i;}
 }
 cin>>m1;
 int x;
 for(i=1;i<=m1;i++){
 cin>>x;
 if(n[x].value>-2){n[n[x].head].end=n[x].end;n[n[x].end].head=n[x].head;n[x].value=-2;}
 }
 i=n[0].end;
 while(i!=-1){
 cout<<n[i].value<<" ";
 	i=n[i].end;
 }
} 

后来把输入单独拿出来做了个for循环就AC了为啥啊:

#include<iostream>
using namespace std;
struct st{
	int head;
	int value;
	int end;
}n[100010];
int main(){
	
	int n1,m1,i,k,p,j,nx[100010],ny[100010],mx[100010];
	cin>>n1;
	for(i=2;i<=n1;i++){
		cin>>nx[i]>>ny[i];
	}
	cin>>m1;
	for(i=1;i<=m1;i++){
		cin>>mx[i];
	}
	
	for(int t=1;t<=n1;t++){
		n[t].end=0;
		n[t].head=0;	
		n[t].value=t;
	}
	
	n[0].end=1;n[1].head=0;n[1].end=-1;n[1].value=1;
	
	
	for(i=2;i<=n1;i++){
		k=nx[i];p=ny[i];
		if(p==0){n[i].head=n[k].head;n[i].end=k;n[k].head=i;n[n[i].head].end=i;}
	    else{n[i].head=k;n[i].end=n[k].end;n[n[k].end].head=i;n[k].end=i;}
	}
	
	int x;
	for(i=1;i<=m1;i++){
	x=mx[i];
	if(n[x].value>-2){n[n[x].head].end=n[x].end;n[n[x].end].head=n[x].head;n[x].value=-2;}
	}
	i=n[0].end;
	while(i!=-1){
	cout<<n[i].value<<" ";
		i=n[i].end;
	}
	return 0;
} 
2020/5/27 18:52
加载中...