在遙遠的s星系中一共有n個星球,編號為1…n。其中的一些星球決定組成聯盟,以方便相互間的交流。
但是,組成聯盟的首要條件就是交通條件。初始時,在這n個星球間有m條太空隧道。每條太空隧道連線兩個星球,使得它們能夠相互到達。若兩個星球屬於同乙個聯盟,則必須存在一條環形線路經過這兩個星球,即兩個星球間存在兩條沒有公共隧道的路徑。
為了壯大聯盟的隊伍,這些星球將建設p條新的太空隧道。這p條新隧道將按順序依次建成。一條新軌道建成後,可能會使一些星球屬於同乙個聯盟。你的任務是計算出,在一條新隧道建設完畢後,判斷這條新軌道連線的兩個星球是否屬於同乙個聯盟,如果屬於同乙個聯盟就計算出這個聯盟中有多少個星球。
看到這題,第一反應就是tarjan縮環,
首先,我們必須保證初始圖的連通性必須和最後圖的連通性相同,
顯然,一條把兩張不連通的邊的答案就是0,所以先把詢問中的這種邊連上,
縮完環以後,出來的就是一顆dfs樹,在這上邊做lca,
對於乙個詢問,先求lca,要麼是連向他的父親,要麼是橫插邊,每次把新的環縮起來,邊統計答案,
每次做完以後lca並不需要維護,(讀者們可以思考一下)
複雜度:o(
nlog(n
))
#include
#include
#include
#include
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define efo(i,q) for(int i=a[q];i;i=b[i][0])
using
namespace
std;
const
int n=200500,m=18;
int read(int &n)
int m,n,ans,m1,ti;
int b[4*n][3],a[n],b0=1;
int low[n],dfn[n],za[n];
int sum[n],g[n],si[n];
int z[n];
int g[n][m+1],de[n];
int root[n],sc[n][3];
int fa[n];
void link(int q,int w)
void dfsf(int q,int rt)
int gf(int q)
int tarjan(int q,int c)
else low[q]=min(low[q],tarjan(b[i][1],c+1));
}if(low[q]==dfn[q])
za[0]--;
}return low[q];
}void dfs(int q,int c,int fa)
int lca1(int q,int c)
int lca(int q,int w)
return q;
}void up(int q,int w)
}int main()
fo(i,1,n)if(i==gf(g[i]))root[++root[0]]=i;
memset(dfn,127,sizeof(dfn));
memset(low,127,sizeof(low));
fo(i,1,root[0])tarjan(root[i],1);
fo(i,1,n)
}fo(i,1,n)
else z[b[j][1]]=ti,j1=j;
}fo(i,1,root[0])dfs(root[i],1,0);
fo(j,1,m)fo(i,1,n)if(g[i][0])
g[i][j]=g[g[i][j-1]][j-1];
fo(i,1,m1)
q=gf(sc[i][0]),w=gf(sc[i][1]);
e=lca(q,w);
q=gf(q);w=gf(w),e=gf(e);
if(q==w&&q==e)
ans=0;
up(q,e);
up(w,e);
printf("%d\n",si[e]);
}return
0;}
JZOJ3875 星球聯盟 alliance
在遙遠的s星系中一共有n個星球,編號為1 n。其中的一些星球決定組成聯盟,以方便相互間的交流。但是,組成聯盟的首要條件就是交通條件。初始時,在這n個星球間有m條太空隧道。每條太空隧道連線兩個星球,使得它們能夠相互到達。若兩個星球屬於同乙個聯盟,則必須存在一條環形線路經過這兩個星球,即兩個星球間存在兩...
置頂 星球聯盟
問題描述 在遙遠的 s 星系中一共有 n 個星球,編號為 1 n。其中的一些星球決定組成聯盟,以方便相互間的交流。但是,組成聯盟的首要條件就是交通條件。初始時,在這 n 個星球間有 m 條太空 隧道。每條太空隧道連線兩個星球,使得它們能夠相互到達。若兩個星球屬於同乙個聯 盟,則必須存在一條環形線路經...
bzoj4998 星球聯盟
description 在遙遠的s星系中一共有n個星球,編號為1 n。其中的一些星球決定組成聯盟,以方便相互間的交流。但是,組成 聯盟的首要條件就是交通條件。初始時,在這n個星球間有m條太空隧道。每條太空隧道連線兩個星球,使得它們能 夠相互到達。若兩個星球屬於同乙個聯盟,則必須存在一條環形線路經過這...