解题报告:luogu P1160

题目链接:P1160 队列安排
链表板子题,但是过于垃圾的我不会指针,好在可以用数组去模拟链表,然后果然一发过了。
不要忘了更新有关元素就好。

\(Code\):

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
//模板题就先不尛了 
#define MAXN 1000005
struct node
{
	int l,r;	
}a[MAXN];
#define read(x) scanf("%d",&x) 
int n,m,k,p;
int vis[MAXN];
int f;
int main()
{
	a[1].l=a[1].r=0;
	read(n);
	for(int i=2;i<=n;i++)
	{
		read(k),read(p);
		if(p==0) a[i].l=a[k].l,a[i].r=k,a[a[k].l].r=i,a[k].l=i;
		else a[i].r=a[k].r,a[i].l=k,a[a[k].r].l=i,a[k].r=i;
	}
	read(m);
	for(int i=1;i<=m;i++)
	{
		read(k);
		if(vis[k]) continue;
		vis[k]=1;
		int h=a[k].l,t=a[k].r;
		a[h].r=t,a[t].l=h;
	}
	for(int i=1;i<=n;i++) if(!vis[i]&&a[i].l==0) f=i;
	while(f)
	{
		printf("%d ",f);
		f=a[f].r;
	}
	printf("\n");
	return 0;
} 

猜你喜欢

转载自www.cnblogs.com/tlx-blog/p/12631465.html