[CF467D]Fedor and Essay
Fedor and Essay
题解
再次吐槽一下某网站的翻译
由于同义词之间连得上单向边,很容易发现,我们可以根据它得到一个有向的图,一个点能够到达的点就是能够被转化成的点。
于是,我们就很容易想到了缩点,一个点能够到达为其连通分量中的任意一点。
接下来我们就得到了一棵由有向边建成的树。通过记忆化搜索,我们很容易得到以某个点为起点时所能得到的最小值。
只要先将字符串离散化成点,跑tarjan与dfs,最后统计答案即可。
源码
#include<bits/stdc++.h>
using namespace std;
#define MAXN 300005
typedef long long LL;
typedef unsigned long long uLL;
const LL mo=1e9+7;
typedef pair<int,int> pii;
template<typename _T>
_T Fabs(_T x){return x<0?-x:x;}
template<typename _T>
void read(_T &x){
_T f=1;x=0;char s=getchar();
while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}
while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar

浙公网安备 33010602011771号