POJ 1236.Network of Schools (强连通)
首先要强连通缩点,统计新的图的各点的出度和入度。
第一问直接输出入度为0的点的个数
第二问是要是新的图变成一个强连通图,那么每一个点至少要有一条出边和一条入边,输出出度和入度为0的点数大的那一个
注意特判,输入已经是一个极大强连通图的情况,输出 1 0
code
/*
无向图强连通的Garbow算法,思路与Tarjan算法相同,实现更直接,效率更好
时间复杂度同样为O(n+m)
思路:
dfn记录访问顺序,st为访问栈,tem为辅助栈
每次找到环时,将环中除顺序最靠前的点其他的点全出栈st
tem中当前点之上(包括当前点)的所有点为一个强连通分量
*/
#include <iostream>
#include <cstring>
using namespace std;
const int INF = 109;
struct node {
int u, v, ne;
} E[INF*INF];
int head[INF], cnt;
int dfn[INF], num[INF], sta[INF], Tops, tem[INF], Topt, scc;
int n;
void addedge (int u, int v) {
E[++cnt].u = u, E[cnt].v = v;
E[cnt].ne = head[u];
head[u] = cnt;
}
void dfs (int k, int t) {
sta[++Tops] = tem[++Topt] = k;
dfn[k] = ++t;
for (int i = head[k]; i != 0; i = E[i].ne) {
int v = E[i].v;
if (!dfn[v]) dfs (v, t);
else if (num[v] == 0)
while (dfn[sta[Tops]] > dfn[v]) Tops--;
}
if (sta[Tops] == k) {
Tops--, scc++;
do
num[tem[Topt]] = scc;
while (tem[Topt--] != k);
}
}
void Garbow (int n) {
memset (dfn, 0, sizeof dfn);
memset (num, 0, sizeof num);
Tops = Topt = scc = 0;
for (int i = 1; i <= n; i++)
if (!num[i]) dfs (i, 0);
}
void make() {
Garbow (n);
int degi[INF], dego[INF];
memset (degi, 0, sizeof degi);
memset (dego, 0, sizeof dego);
if (scc == 1) {
cout << 1 << endl << 0 << endl;
return ;
}
for (int i = 1; i <= cnt; i++) {
int u = E[i].u, v = E[i].v;
if (num[u] != num[v]) {
degi[num[v]] = 1;
dego[num[u]] = 1;
}
}
int ans1=0, ans2=0;
for (int i = 1; i <= scc; i++) {
if (degi[i] == 0) ans1++;
if (dego[i] == 0) ans2++;
}
cout << ans1 <<endl<< max (ans1, ans2);
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
int x;
while (cin >> x && x)
addedge (i, x);
}
make();
return 0;
}
POJ 1236.Network of Schools (强连通)的更多相关文章
- POJ 1236 Network Of Schools (强连通分量缩点求出度为0的和入度为0的分量个数)
Network of Schools A number of schools are connected to a computer network. Agreements have been dev ...
- poj~1236 Network of Schools 强连通入门题
一些学校连接到计算机网络.这些学校之间已经达成了协议: 每所学校都有一份分发软件的学校名单("接收学校"). 请注意,如果B在学校A的分发名单中,则A不一定出现在学校B的名单中您需 ...
- POJ 1236 Network of Schools (强连通分量缩点求度数)
题意: 求一个有向图中: (1)要选几个点才能把的点走遍 (2)要添加多少条边使得整个图强联通 分析: 对于问题1, 我们只要求出缩点后的图有多少个入度为0的scc就好, 因为有入度的scc可以从其他 ...
- POJ 1236 Network of Schools(强连通 Tarjan+缩点)
POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意: 给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...
- POJ 1236 Network of Schools(强连通分量)
POJ 1236 Network of Schools 题目链接 题意:题意本质上就是,给定一个有向图,问两个问题 1.从哪几个顶点出发,能走全全部点 2.最少连几条边,使得图强连通 思路: #inc ...
- Poj 1236 Network of Schools (Tarjan)
题目链接: Poj 1236 Network of Schools 题目描述: 有n个学校,学校之间有一些单向的用来发射无线电的线路,当一个学校得到网络可以通过线路向其他学校传输网络,1:至少分配几个 ...
- poj 1236 Network of Schools(又是强连通分量+缩点)
http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- [tarjan] poj 1236 Network of Schools
主题链接: http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K To ...
- poj 1236 Network of Schools(连通图入度,出度为0)
http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- POJ 1236 Network of Schools (有向图的强连通分量)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9073 Accepted: 359 ...
随机推荐
- nginx+tomcat配置https
nginx代理https后,应用redirect https变成http,很多页面报404.情况类似http://blog.sina.com.cn/s/blog_56d8ea900101hlhv.ht ...
- 【狼】unity 鼠标拖拽物体实现任意角度自旋转
主要涉及函数 Input.GetAxis(“Mouse x”) 可取得鼠标横向(x轴)移动增量 Input.GetAxis(“Mouse y”) 可取得鼠标竖向(y轴)移动增量 通过勾股定理获取拖拽长 ...
- 【转】VS2013编译libjpeg库
原文地址:http://blog.csdn.net/weixinhum/article/details/42718959 现在,很多图像处理工具和开源库都给出了图像解码的函数接口,然而有时这些接口并不 ...
- Bridges painting - SGU 121(构造)
题目大意:有个一无向图,给所有的边染色,如果一个点连接的边超过两个,那么最少要染一个白色和一个黑色,能否给整个图染色?不能输出“No solution”. 分析:引用连接 http://edward- ...
- rnqoj-73-展演队型-dp
纯属于敢想就敢做的题目,列出来状态转移就OK了 #include<stdio.h> #include<string.h> #include<iostream> #i ...
- ListBoxControl 删除选择的项的方法
public void RemoveSelectItems<T>(BaseListBoxControl listControl) { var list ...
- MapObject shape数据操作
利用MO 的GeoDataset .DataConnection Recordset 进行数据操作 在MO中.使用GeoDataset对象和DataConnection 对象来连接和读取地理数据. ...
- UISegmentedControl UISlider
self.view.backgroundColor = [UIColor whiteColor]; //UISegmentedControl 是iOS中的分段控件,事实上是多个button的组合视图, ...
- android 47 service绑定
如果一个service已经启动了,activity和service绑定了在解除邦定,则这个service不会销毁,因为这个service不是这个Activity创建的. service生命周期: Ac ...
- Tomcat源码分析--转
一.架构 下面谈谈我对Tomcat架构的理解 总体架构: 1.面向组件架构 2.基于JMX 3.事件侦听 1)面向组件架构 tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成 ...