博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj - 1236 Network of Schools
阅读量:6832 次
发布时间:2019-06-26

本文共 2159 字,大约阅读时间需要 7 分钟。

强连通分量题,涉及求强连通分量和缩点,基本是抄的模板,我也是把这题的代码当模板放这里。

做这题的一个收获,缩点后为构造强连通分量,最少要添加几条有向边:统计入度和出度为0的点的数量,取其大者。

1 #include 
2 #include
3 #include
4 using namespace std; 5 const int N = 105; 6 int stk[N],col[N],dep[N],low[N]; 7 int cnt,cols,top,ans1,ans2; 8 bool inq[N]; 9 vector
a[N];10 void DFS(int u)11 {12 int i,t,l,v;13 l = a[u].size();14 dep[u] = low[u] = ++cnt;15 stk[top++] = u;16 inq[u] = 1;17 for(i = 0; i < l; i++)18 {19 v = a[u][i];20 if(!dep[v])21 {22 DFS(v);23 if(low[v] < low[u])24 low[u] = low[v];25 }26 else if(inq[v])27 {28 if(dep[v] < low[u])29 low[u] = dep[v];30 }31 }32 if(dep[u] == low[u])33 {34 cols++;35 do{36 t = stk[--top];37 inq[t] = 0;38 col[t] = cols;39 }while(t != u);40 }41 }42 void Tarjan(int n)43 {44 int in0=0,out0=0,i,j,l,v;45 int in[N],out[N];46 cnt = top = cols = 0;47 memset(inq,0,sizeof inq);48 memset(dep,0,sizeof dep);49 memset(low,0,sizeof low);50 for(i = 1; i <= n; i++)51 if(!dep[i]) DFS(i);52 if(cols == 1)53 {54 ans1 = 1;55 ans2 = 0;56 return ;57 }58 memset(in,0,sizeof in);59 memset(out,0,sizeof out);60 for(i = 1; i <= n; i++)61 {62 l = a[i].size();63 for(j = 0; j < l; j++)64 {65 v = a[i][j];66 if(col[i] != col[v])67 out[col[i]]++, in[col[v]]++;68 }69 }70 for(i = 1; i <= cols; i++)71 {72 if(!in[i]) in0++;73 if(!out[i]) out0++;74 }75 ans1 = in0;76 ans2 = in0 > out0 ?in0 :out0 ;77 }78 int main()79 {80 int n,i,t;81 while(~scanf("%d",&n))82 {83 for(i = 1; i <= n; i++)84 while(scanf("%d",&t),t)85 a[i].push_back(t);86 Tarjan(n);87 printf("%d\n%d\n",ans1,ans2);88 }89 return 0;90 }

转载于:https://www.cnblogs.com/lzxskjo/archive/2012/08/29/2661088.html

你可能感兴趣的文章
powerdesigner 设置自动增长列(identity)和默认值
查看>>
Click Button to change the color of TextView
查看>>
oracle preparestmt 插入时间
查看>>
Java系的几种WebServer和ApplicationServer
查看>>
Android之菜单二——上下文菜单
查看>>
JavaScript中onmouseover时如何让鼠标指针变成一个小手状
查看>>
clear:both; 用法 什么时候用
查看>>
三层结构
查看>>
【简报】超棒的拖放式文件上传javascript类库:FileDrop
查看>>
连续子数组的最大和
查看>>
转: Oracle AWR 报告 每天自动生成并发送邮箱
查看>>
solr dataimport 数据导入源码分析(十)总结
查看>>
So easy,JQuery调用WebServices
查看>>
GNU make manual 翻译(四十七)
查看>>
makefile中变量覆盖的小例子
查看>>
所有类型都从Object类型派生
查看>>
关于MFC和android开发上的一些相近地方
查看>>
Linux下rsync的用法
查看>>
c# DataGridView控件的使用
查看>>
TChart的用法
查看>>