poj 1236——Network of Schools
2013-07-26 21:26
417 查看
tarjan算法
注意:如果是强连通图的化输出0 1
通过tarjan算法缩点。
第一问输出入度点=0的个数。
第二问中添加的边数是max(入度点=0的个数,出度点=0的个数)。 暂且当定理记下。
注意:如果是强连通图的化输出0 1
通过tarjan算法缩点。
第一问输出入度点=0的个数。
第二问中添加的边数是max(入度点=0的个数,出度点=0的个数)。 暂且当定理记下。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define maxm 21000 #define maxn 220 int n; int head[maxn],cnt; int v[maxm],next[maxm]; int dfn[maxn],low[maxn],step; int sta[maxn],top; int ID[maxn],IdNum; int d_in[maxn],d_out[maxn]; bool vis[maxn]; void add(int a,int b) { v[cnt]=b; next[cnt]=head[a]; head[a]=cnt++; } void Init() { memset(vis,0,sizeof(vis)); memset(d_in,0,sizeof(d_in)); memset(d_out,0,sizeof(d_out)); memset(head,-1,sizeof(head)); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); IdNum=top=step=cnt=0; } void tarjan(int u) { low[u]=dfn[u]=++step; sta[++top]=u; vis[u]=1; for(int i=head[u];~i;i=next[i]) { int to=v[i]; if(!dfn[to]) { tarjan(to); low[u]=min(low[u],low[to]); } else if(vis[to]) low[u]=min(low[u],dfn[to]); } if(low[u]==dfn[u]) { int x; IdNum++; do { x=sta[top--]; vis[x]=0; ID[x]=IdNum; }while(u!=x); } } void build() { for(int i=1;i<=n;i++) for(int j=head[i];~j;j=next[j]) { int to=v[j]; if(ID[i]!=ID[to]) { d_in[ID[to]]++; d_out[ID[i]]++; } } } int main() { int x; while(~scanf("%d",&n)) { Init(); for(int i=1;i<=n;i++) { scanf("%d",&x); while(x) { add(i,x); scanf("%d",&x); } } for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i); build(); int ans1=0; int ans2=0; for(int i=1;i<=IdNum;i++) { if(d_in[i]==0) ans1++; if(d_out[i]==0) ans2++; } if(IdNum!=1) printf("%d\n%d\n",ans1,max(ans1,ans2)); else printf("1\n0\n"); } return 0; }
相关文章推荐
- poj 1236 Network of Schools
- POJ-1236-Network of Schools
- |poj 1236|强连通分量|Network of Schools
- POJ 1236 Network of Schools
- POJ 1236 Network of Schools
- POJ 1236 Network of Schools
- POJ 1236 Network of Schools
- 【强连通分量】POJ 1236 Network of Schools
- poj 1236 Network of Schools
- poj1236 Network of Schools
- poj 1236 Network of Schools
- POJ 1236 Network of Schools
- POJ 1236 Network of Schools
- 【连通图|强连通分量+缩点】POJ-1236 Network of Schools
- [强连通分支]poj_1236_network of schools
- POJ1236 Network of Schools
- poj 1236 Network of Schools
- POJ 1236 Network of Schools 已翻译
- POJ 1236 Network of Schools
- poj 1236-Network of Schools:Tarjan算法实现