POJ 3352 边-双连通 HDU 2767 强连通
来源:互联网 发布:matlab修改矩阵元素 编辑:程序博客网 时间:2024/06/08 10:08
POJ3352
边-双连通模板题
//#pragma comment(linker, "/STACK:102400000,102400000")#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<cmath>#include<cctype>#include<string>#include<algorithm>#include<iostream>#include<ctime>#include<map>#include<set>using namespace std;#define MP(x,y) make_pair((x),(y))#define PB(x) push_back(x)//typedef __int64 LL;//typedef unsigned __int64 ULL;/* ****************** */const int INF=100011122;const double INFF=1e100;const double eps=1e-8;const int mod=9999991;const int NN=1005;const int MM=2000010;/* ****************** */struct G{ int u,v,next; bool fg;}E[NN*2];int p[NN],T;int dfn[NN],low[NN],tsp;int sta[NN],sta_top;int id[NN],id_cnt;int du[NN];void add(int u,int v){ E[T].u=u; E[T].v=v; E[T].next=p[u]; E[T].fg=false; p[u]=T++;}int findid(int x){ if(id[x]==x)return x; return id[x]=findid(id[x]);}void tarjan(int u){ int i,v; dfn[u]=low[u]=++tsp; sta[++sta_top]=u; for(i=p[u];i+1;i=E[i].next) { if(E[i].fg) continue; v=E[i].v; if(!dfn[v]) { E[i].fg=true; E[i^1].fg=true; tarjan(v); low[u]=min(low[u],low[v]); } else { low[u]=min(low[u],dfn[v]); } } if(low[u]==dfn[u]) { id_cnt++; do { v=sta[sta_top--]; id[v]=u; }while(v!=u); }}int main(){ int n,m,u,v,i,ans; while(scanf("%d%d",&n,&m)!=EOF) { memset(p,-1,sizeof(p)); T=0; while(m--) { scanf("%d%d",&u,&v); add(u,v); add(v,u); } for(i=1;i<=n;i++) { dfn[i]=low[i]=0; id[i]=i; } tsp=0; sta_top=0; id_cnt=0; tarjan(1); for(i=1;i<=n;i++) { du[i]=0; } for(i=0;i<T;i+=2) { u=findid(E[i].u); v=findid(E[i].v); if(u!=v) { du[u]++; du[v]++; } } ans=0; for(i=1;i<=n;i++) if(du[i]==1) ans++; printf("%d\n",(ans+1)/2); } return 0;}
HDU 2767
强连通模板题
//#pragma comment(linker, "/STACK:102400000,102400000")#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<cmath>#include<cctype>#include<string>#include<algorithm>#include<iostream>#include<ctime>#include<map>#include<set>using namespace std;#define MP(x,y) make_pair((x),(y))#define PB(x) push_back(x)//typedef __int64 LL;//typedef unsigned __int64 ULL;/* ****************** */const int INF=100011122;const double INFF=1e100;const double eps=1e-8;const int mod=9999991;const int NN=20005;const int MM=50010;/* ****************** */struct G{ int u,v,next;}E[MM];int p[NN],T;int dfn[NN],low[NN],tsp;int sta[NN],sta_top;bool in_sta[NN];int id[NN],id_cnt;int ind[NN],outd[NN];void add(int u,int v){ E[T].u=u; E[T].v=v; E[T].next=p[u]; p[u]=T++;}void scc(int u){ int i,v; dfn[u]=low[u]=++tsp; sta[++sta_top]=u; in_sta[u]=true; for(i=p[u];i+1;i=E[i].next) { v=E[i].v; if(dfn[v]==0) { scc(v); low[u]=min(low[u],low[v]); } else if(in_sta[v]) low[u]=min(low[u],dfn[v]); } if(dfn[u]==low[u]) { id_cnt++; for(;;) { v=sta[sta_top--]; id[v]=id_cnt; in_sta[v]=false; if(v==u)break; } }}int main(){ int cas,n,m; int u,v,i,ans1,ans2; scanf("%d",&cas); while(cas--) { scanf("%d%d",&n,&m); memset(p,-1,sizeof(p)); T=0; while(m--) { scanf("%d%d",&u,&v); add(u,v); } for(i=1;i<=n;i++) { dfn[i]=low[i]=0; id[i]=-1; in_sta[i]=false; } tsp=0; sta_top=0; id_cnt=0; for(i=1;i<=n;i++) { if(dfn[i]==0) scc(i); } if(id_cnt==1) { puts("0"); continue; } for(i=1;i<=id_cnt;i++) ind[i]=outd[i]=0; for(i=0;i<T;i++) { u=id[ E[i].u ]; v=id[ E[i].v ]; if(u!=v) { outd[u]++; ind[v]++; } } ans1=ans2=0; for(i=1;i<=id_cnt;i++) { if(ind[i]==0) ans1++; if(outd[i]==0) ans2++; } printf("%d\n",max(ans1,ans2)); } return 0;}
0 0
- POJ 3352 边-双连通 HDU 2767 强连通
- 强连通&&双连通
- POJ 1515 无向连通图定向边改造为强连通 边双连通
- 双连通+强连通整理
- 强连通图和双连通图
- 割点、桥、点双连通、边双连通、强连通 题目
- POJ 1438 混合图定定向为强连通图 双连通
- 【连通图|边双连通+缩点】POJ-3352 Road Construction
- 无向图的割边,双连通||有向图的强连通,割边
- poj 3352 边双连通
- 连通性Tarjan算法 双连通与强连通
- hdu 2767(强连通分量)
- HDU 2767 强连通分量
- hdu 2767强连通分量
- poj 3352 双连通
- 强连通分量与双连通分量
- 强连通分量与双连通分量
- 浅谈双连通分量、强连通分量
- nova挂载cinder卷流程分析
- AutoMapper 基本用法
- Oracle 分区索引
- 遍历文件夹下所有的文件名
- UI 类设计的网址
- POJ 3352 边-双连通 HDU 2767 强连通
- POJ 2996 Help Me with the Game
- Chrome调试js出现Uncaught SyntaxError: Unexpected identifier
- sublimeText2字体主题一键安装包
- C++内部数据类型和非内部数据类型
- 浏览器全屏效果
- POJ.3176.Cow Bowling
- apache支持中文下载(64位)
- JQuery EasyUI datagrid 键盘上下控制选中行