蓝书的证明很详细了。
这里说下我做这题遇到的迷惑点:
这里要用e-DCC而非v-DCC,详情见https://blog.csdn.net/bjfu170203101/article/details/107090925
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e6+7;
const int N = 1e3 +7;
int head[2*M],cnt=1;
struct EDGE{int to,nxt,w;}ee[M*2];
void add(int x,int y,int w){ee[++cnt].nxt=head[x],ee[cnt].w=w,ee[cnt].to=y,head[x]=cnt;}
int mp[N][N];
int dfn[N],low[N],sz,rt,sk[M],top;
bool cut[M];
int col[N],vs[N],choose[N];
vector<int>dcc[N];
int ct;
int n,m;
void init()
{
cnt=1;top=ct=0;
memset(choose,0,sizeof(choose));
memset(head,0,sizeof(head));
memset(mp,0,sizeof(mp));
memset(dfn,0,sizeof(dfn));
memset(cut,0,sizeof(cut));
mem