Connected Components? CodeForces - 920E

http://codeforces.com/problemset/problem/920/E

求补图的各个连通块大小 智商不够 直接线段树优化建图 然后tarjan缩点 幸好内存不紧。。

 

#include 
using namespace std;
#define pb push_back
const int maxn=2e5+10;
const int maxm=2e5+10;
const int N=0x3f3f3f3f;

vector  edge[4*maxn];
vector  pre[maxn];
stack  stk;
int first[4*maxn],val[4*maxn],dfn[4*maxn],low[4*maxn],belong[4*maxn],book[4*maxn],sum[4*maxn],mp[maxn],ans[maxn];
int n,m,nn,num,cnt,tot;

void build(int l,int r,int cur)
{
    int m;
    if(l==r)
    {
        val[cur]=1,mp[l]=cur;
        nn=max(nn,cur);
        return;
    }
    edge[cur].pb(2*cur);
    edge[cur].pb(2*cur+1);
    m=(l+r)/2;
    build(l,m,2*cur);
    build(m+1,r,2*cur+1);
}

void update(int tar,int pl,int pr,int l,int r,int cur)
{
    int m;
    if(pl<=l&&r<=pr)
    {
        edge[tar].pb(cur);
        return;
    }
    m=(l+r)/2;
    if(pl<=m) update(tar,pl,pr,l,m,2*cur);
    if(pr>m) update(tar,pl,pr,m+1,r,2*cur+1);
}

void dfs(int cur)
{
	int i,v,t;
	stk.push(cur);
	dfn[cur]=num,low[cur]=num,book[cur]=1;
	num++;
	for(i=0;i

 

你可能感兴趣的:(线段树/树状数组/RMQ,强连通分量)