战狂也在玩《魔方王国》。他只会征兵而不会建城市,因此他决定对小奇的城市进行轰炸。
小奇有n 座城市,城市之间建立了m 条有向的地下通道。战狂会发起若干轮轰炸,每轮可以轰炸任意多个城市。
每座城市里都有战狂部署的间谍,在城市遭遇轰炸时,它们会通过地下通道撤离至其它城市。非常不幸的是,在地道里无法得知其它城市是否被轰炸,如果存在两个不同的城市i,j,它们在同一轮被轰炸,并且可以通过地道从城市i 到达城市j,那么城市i 的间谍可能因为撤离到城市j 而被炸死。为了避免这一情况,战狂不会在同一轮轰炸城市i 和城市j。
你需要求出战狂最少需要多少轮可以对每座城市都进行至少一次轰炸。
此题好坑啊,隔了一天才切掉
我们好多人看错题了qwq,题目有一句诡异的话:
“
并且可以通过地道从城市i 到达城市j
”
于是我们70%的人理解成了:i,j有连边
而不是:i可以通过地道到达j
好吧看对了这题就是一个tarjan缩点+最长路dp而已。。。
嗯上来就可以写一发
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<vector>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 1000010
using namespace std;
struct Edge{ int v,nt; } G[N];