UVA 10972 RevolC FaeLoN(边双联通+缩点)
2017-01-23 19:16
447 查看
#include<iostream> #include<vector> #include<cstring> using namespace std; const int maxn=1000+5; const int maxm=maxn*maxn; struct Edge{ int u,v; Edge(int u=0,int v=0):u(u),v(v){} }e[maxm]; int n,m,tot,stamp,dfn[maxn],low[maxn],bccno[maxn],bcc_cnt,de[maxn]; vector<int> vec[maxn],bcc[maxn]; bool g[maxn][maxn],isbridge[maxm]; void tarjan(int index,int fa) { int tmp; dfn[index]=low[index]=++stamp; for(int i=0;i<vec[index].size();i++) { tmp=e[vec[index][i]].v; if(!dfn[tmp]) { tarjan(tmp,index); low[index]=min(low[index],low[tmp]); if(low[tmp]>dfn[index]) isbridge[vec[index][i]]=isbridge[vec[index][i]^1]=1; } else if(dfn[tmp]<dfn[index] && tmp!=fa) { low[index]=min(low[index], dfn[tmp]); } } } void dfs(int index) { dfn[index]=1; bccno[index]=bcc_cnt; for(int i=0;i<vec[index].size();i++) { int tmp=vec[index][i]; if(isbridge[tmp]) continue; if(!dfn[e[tmp].v]) { dfs(e[tmp].v); } } } void find_ebcc(){ bcc_cnt=stamp=0; memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(isbridge,0,sizeof(isbridge)); memset(bccno,0,sizeof(bccno)); memset(bcc,0,sizeof(bcc)); for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i, -1); memset(dfn,0,sizeof(dfn)); for(int i=1;i<=n;i++) { if(!dfn[i]) { bcc_cnt++; dfs(i); } } } void addedge(int u,int v) { e[tot]=Edge(u,v); vec[u].push_back(tot++); } int main() { while(~scanf("%d%d",&n,&m)) { tot=0; memset(vec,0,sizeof(vec)); for(int i=0;i<m;i++){ int u,v; scanf("%d%d",&u,&v); addedge(u,v); addedge(v,u); } find_ebcc(); memset(de,0,sizeof(de)); for(int i=0;i<tot;i++){ if(bccno[e[i].u]!=bccno[e[i].v]) {de[bccno[e[i].u]]++;} } int ans=0; for(int i=1;i<=bcc_cnt;i++){ if(de[i]==1) ans++; if(de[i]==0) ans+=2; } if(bcc_cnt==1) printf("0\n"); else printf("%d\n",(ans+1)/2); } return 0; }
相关文章推荐
- uva 10972 - RevolC FaeLoN(双联通)
- UVA 10972 RevolC FaeLoN(边-双连通+缩点)
- UVA10972 - RevolC FaeLoN(双连通分量)
- Uva10972(RevolC FaeLoN)
- UVA10972 - RevolC FaeLoN(双连通分量)
- 【RevolC FaeLoN Uva 10972】
- uva 10972 - RevolC FaeLoN(边双连通分量)
- uva 10972 RevolC FaeLoN (双连通分量)
- Uva 10972 RevolC FaeLoN(边双连通分量)
- UVA-10972 - RevolC FaeLoN(边双连通分量)
- UVA -- 10972 RevolC FaeLoN(边双连通)
- UVA 10972 - RevolC FaeLoN(边-双连通分量)
- RevolC FaeLoN UVA - 10972
- UVA 10972 - RevolC FaeLoN(边-双连通分量)
- UVA 10972 RevolC FaeLoN(边-双连通+缩点)
- uva 10972 RevolC FaeLoN cdoj 方老师和农场
- UVA 10972 RevolC FaeLoN(边连通分量)
- uva 10972 添加几条变使得无向图为双联通分量
- 【UVA10972】RevolC FaeLoN (求边双联通分量)
- 文章标题 UVALive 6062:Reduce the Maintenance Cost(双联通分量缩点)