题解:
首先第一个阶段,
可以写kosaraju、也可以写tarjan。
这两种还都分递归和dfs转非递归。
----------------------------------四种方案。
第二个阶段,可以写拓扑DP
也可以写最长路
----------------------------------乘上之前的,,八种方案。
本文写了kosaraju递归版,tarjan递归版,kosaraju非递归版。
……只怪学校oj系统栈太小。。都是逼得啊。
代码1(tarjan):
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 501000
using namespace std;
struct KSD
{
int u,v,next;
}e[N],E[N];
int head[N],cnt,Head[N];
void add(int u,int v)
{
cnt++;
e[cnt].u=u;
e[cnt].v=v;
e[cnt].next=head[u];
head[u]=cnt;
}
void Add(int u,int v)
{
cnt++;
E[cnt].v=v;
E[cnt].next=Head[u];
Head[u]=cnt;
}
int dfn[N],low[N];
int group,id[N];
bool in[N];
int st