【POJ 1236 Network of Schools】强联通分量问题 Tarjan算法,缩点

简介: 题目链接:http://poj.org/problem?id=1236 题意:给定一个表示n所学校网络连通关系的有向图。现要通过网络分发软件,规则是:若顶点u,v存在通路,发给u,则v可以通过网络从u接收到。

题目链接:http://poj.org/problem?id=1236

题意:给定一个表示n所学校网络连通关系的有向图。现要通过网络分发软件,规则是:若顶点u,v存在通路,发给u,则v可以通过网络从u接收到。

现要求解两个问题:

TaskA: 最少分发给几个学校,就可以使所有的学校都能得到软件。

TaskB: 最少增加几条边,就可以使得,发软件给任一学校,所有学校都可以收到。

思路:先进行强联通分量分解,然后缩点,并计算缩点后每个点的出度、入度。入度为0的点的总数为 a ,出度为0的点总数为 b。a即TaskA的答案,而TaskB的答案为max(a, b)。

求SCC部分参考了 http://blog.csdn.net/dgq8211/article/details/7834292

缩点的做法很暴力,将每个强联通分量重新编号为一个集合,在求SCC时记录belong。

 1 #include <cstdio>
 2 #include <vector>
 3 #include <stack>
 4 #include <cstring>
 5 using namespace std;
 6 const int MAX_N = 105;
 7 
 8 int n;
 9 vector<int> G[MAX_N];
10 stack<int> S;
11 int clock;
12 int scc;
13 int dfn[MAX_N], low[MAX_N];
14 int inStack[MAX_N];
15 int belong[MAX_N];
16 int indeg[MAX_N];//scc的
17 int outdeg[MAX_N];
18 
19 void init(){
20     scc = 0;
21     clock = 0;
22     memset(dfn, 0, sizeof(dfn));
23     memset(low, 0, sizeof(low));
24     memset(inStack, 0, sizeof(inStack));
25     memset(indeg, 0, sizeof(indeg));
26     memset(outdeg, 0, sizeof(outdeg));
27 }
28 
29 void tarjan(int u){
30     dfn[u] = low[u] = ++clock;
31     S.push(u);
32     inStack[u] = 1;
33     for(int i=0; i<G[u].size(); i++){
34         int v = G[u][i];
35         if(!dfn[v]){
36             tarjan(v);
37             low[u] = min(low[u], low[v]);
38         }else if(inStack[v]){
39             low[u] = min(low[u], dfn[v]);
40         }
41     }
42     if(dfn[u] == low[u]){
43         int v;
44         do{
45             v = S.top();
46             S.pop();
47             inStack[v] = 0;
48             belong[v] = scc;
49             //printf("%d ", v);
50         }while(v != u);
51         scc++;
52     }
53 }
54 
55 
56 int main()
57 {
58     freopen("1236.txt", "r", stdin);
59     scanf("%d", &n);
60     for(int i=1; i<=n; i++){
61         int u;
62         while(scanf("%d", &u) && u){
63             G[i].push_back(u);
64             //outdeg[i]++;
65             //indeg[u]++;
66         }
67     }
68     init();
69     for(int i=1; i<=n; i++){//遍历所有点
70         if(!dfn[i]){//未被发现的点
71             tarjan(i);
72         }
73     }
74     int a = 0;
75     int b = 0;
76 
77     for(int i=1; i<=n; i++){//缩点
78         for(int j=0; j<G[i].size(); j++){
79             int u = G[i][j];
80             if(belong[i] != belong[u]){
81                 outdeg[belong[i]]++;
82                 indeg[belong[u]]++;
83             }
84         }
85     }
86 
87     for(int i=0; i<scc; i++){
88         if(indeg[i] == 0) a++;
89         if(outdeg[i] == 0) b++;
90     }
91 
92     b = max(a, b);
93     if(scc == 1) b = 0;
94     printf("%d\n%d\n", a, b);
95     return 0;
96 }

 

目录
相关文章
|
6月前
|
算法 数据挖掘 定位技术
【MATLAB】赫尔默特方差分量估计算法
【MATLAB】赫尔默特方差分量估计算法
75 0
|
3月前
|
机器学习/深度学习 存储 算法
【博士每天一篇文献-算法】Memory augmented echo state network for time series prediction
本文介绍了一种记忆增强的回声状态网络(MA-ESN),它通过在储层中引入线性记忆模块和非线性映射模块来平衡ESN的记忆能力和非线性映射能力,提高了时间序列预测的性能,并在多个基准数据集上展示了其优越的记忆能力和预测精度。
28 3
【博士每天一篇文献-算法】Memory augmented echo state network for time series prediction
|
3月前
|
机器学习/深度学习 算法 调度
【博士每天一篇文献-算法】Neurogenesis Dynamics-inspired Spiking Neural Network Training Acceleration
NDSNN(Neurogenesis Dynamics-inspired Spiking Neural Network)是一种受神经发生动态启发的脉冲神经网络训练加速框架,通过动态稀疏性训练和新的丢弃与生长策略,有效减少神经元连接数量,降低训练内存占用并提高效率,同时保持高准确性。
39 3
|
3月前
|
机器学习/深度学习 算法 网络架构
【博士每天一篇文献-算法】CircuitNet:A Generic Neural Network to Realize Universal Circuit Motif Modeling
本文介绍了CircuitNet,这是一种新型神经网络,它受到神经回路结构的启发,通过使用电路基元单元(CMUs)来模拟通用电路基元,并通过调整CMU内部权重来实现建模,在多种机器学习任务中展现出优于传统前馈网络的性能。
54 3
|
3月前
|
算法 数据挖掘
【博士每天一篇文献-算法】Imposing Connectome-Derived Topology on an Echo State Network
本文研究了将果蝇连接图的拓扑结构应用于回声状态网络(ESN)中,提出了一种新型的“果蝇ESN”(FFESN),通过替换传统ESN的储层层为基于果蝇神经连接结构的连接矩阵,发现FFESN在混沌时间序列预测任务中表现出较传统ESN更低的方差或更高的性能。
28 1
|
3月前
|
机器学习/深度学习 算法
【博士每天一篇文献-算法】Modular state space of echo state network
本文提出了一种改进的回声状态网络(ESN)方法,名为模块化状态空间的ESN(MSSESN),通过将状态空间分解为多个子空间(模块)并使用分段输出函数映射每个模块的状态到输出,实现了直接预测,提高了预测性能,并在Mackey-Glass和Lorenz时间序列预测中展示了其优越性。
19 0
【博士每天一篇文献-算法】Modular state space of echo state network
|
3月前
|
机器学习/深度学习 存储 算法
【博士每天一篇文献-算法】Echo State Network with Hub Property
本文提出了一种具有枢纽特性的回声状态网络(HESN),通过在子储层和输出层之间引入枢纽层来整合信号,从而模拟枢纽特性,旨在提高网络性能,特别是在处理时间序列预测问题时。
18 0
|
5月前
|
算法 JavaScript 程序员
程序员必知:《程序设计与算法(二)算法基础》《第一周枚举》熄灯问题POJ
程序员必知:《程序设计与算法(二)算法基础》《第一周枚举》熄灯问题POJ
30 0
|
6月前
|
算法 vr&ar Windows
Tarjan算法求LCA(最近公共祖先)
Tarjan算法求LCA(最近公共祖先)
40 0
|
6月前
|
机器学习/深度学习 自然语言处理 算法
Python高级算法——人工神经网络(Artificial Neural Network)
Python高级算法——人工神经网络(Artificial Neural Network)
131 0