传送门
先倍增出 i i i使得 2 i 2^i 2i时间时刚好有每个点能够到 m m m层及以上。
然后就可以用 f l o y d + floyd+ floyd+倍增求出刚好不超过 m m m层的时间,最后再补一层就行了。
代码:
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while