题意:
给你n个点m条边。入度为0的点标为1,如果一个点只有一个点指向,那么它标为那个点的标数。如果一个点有两个或以上相同标号的点指向。那么给它标为i+1,如果有更大的话就标为更大的。求最大的标号。
解析:
这题可以借鉴宽度优先搜索拓扑排序的思想,但是这边有一个技巧,用vis[]数组来表示当前节点是否有两个入度,如果有当前节点上有两个入度的话,就将vis[]标记为true。
每次bfs时,就将当前点的 order[u] += vis[u];
AC代码
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int N = 1e3 +