分析
一眼拓扑,但是写到一半发现又问题,注意到从1开始,每个出边所对应的书都必须读,所以改为从1开始BFS,记录所有要读的书,然后按照拓扑序跑一边碰到要读的就输出,保证可以符合顺序上的要求。
但是实际上搜一遍就可以了,直接DFS,从1开始对于每个最先搜完的节点输出就行,也就是逆DFS序(posdfn),等同于拓扑序。
上代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
struct node
{
int to,next;
}e[300010],e2[300010];
int n,in[200010],dis[200010],p[200010],read[200010];
int tot,hd[300010];
int tot2,hd2[300010