POJ 1236 Network of Schools(强连通 Tarjan+缩点)

ACM

题目地址:POJ 1236

题意: 
给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得有向图成为一个强连通图。

分析: 
跟HDU 2767 Proving Equivalences(题解)一样的题目,只是多了个问题,事实上转化成DAG后就不难考虑了,事实上仅仅要选择入度为0的点即可了。

代码:

/*
*  Author:      illuz <iilluzen[at]gmail.com>
*  File:        1236.cpp
*  Create Date: 2014-07-30 15:13:12
*  Descripton:  Tarjan
*/#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#include <vector>
#include <stack>
#define repf(i,a,b) for(int i=(a);i<=(b);i++)
typedef long long ll;const int N = 105;vector<int> G[N];
stack<int> S;
int low[N], dfn[N], sccno[N], tclock, scccnt;
int id[N], od[N];
int n, rd;void tarjan(int u) {low[u] = dfn[u] = ++tclock;S.push(u);int sz = G[u].size();repf (i, 0, sz - 1) {int v = G[u][i];if (!dfn[v]) {tarjan(v);low[u] = min(low[u], low[v]);} else if (!sccno[v]) {low[u] = min(low[u], dfn[v]);}}if (low[u] == dfn[u]) {scccnt++;int v = -1;while (v != u) {v = S.top();S.pop();sccno[v] = scccnt;}}
}void read() {repf (i, 1, n) {G[i].clear();while (scanf("%d", &rd) && rd) {G[i].push_back(rd);}}
}void find_scc() {tclock = scccnt = 0;memset(dfn, 0, sizeof(dfn));memset(low, 0, sizeof(low));memset(sccno, 0, sizeof(sccno));repf (i, 1, n) {if (!dfn[i]) {tarjan(i);}}
}void solve() {if (scccnt == 1) {printf("1\n0\n");return;}memset(id, 0, sizeof(id));memset(od, 0, sizeof(od));repf (u, 1, n) {int sz = G[u].size();repf (i, 0, sz - 1) {int v = G[u][i];if (sccno[u] != sccno[v]) {id[sccno[v]]++;od[sccno[u]]++;}}}int idnum = 0, odnum = 0;repf (i, 1, scccnt) {idnum += (id[i] == 0);odnum += (od[i] == 0);}printf("%d\n%d\n", idnum, max(idnum, odnum));
}int main() {while (~scanf("%d", &n)) {read();find_scc();solve();}return 0;
}

转载于:https://www.cnblogs.com/hrhguanli/p/3904237.html

POJ 1236 Network of Schools(强连通 Tarjan+缩点)相关推荐

  1. POJ 1236 Network of Schools(强连通分量缩点求根节点和叶子节点的个数)

    Description: A number of schools are connected to a computer network. Agreements have been developed ...

  2. POJ 1236 Network of Schools(tarjan)

    Network of Schools Description A number of schools are connected to a computer network. Agreements h ...

  3. POJ - 1236 Network of Schools(强连通缩点)

    题目链接:点击查看 题目大意:一个学校连接在一个计算机网络上,学校之间存在软件支援协议,每个学校都有它应支援的学校名单(学校A支援学校B,并不表示学校B一定支援学校A).当某校获得一个新软件时,无论是 ...

  4. [tarjan] poj 1236 Network of Schools

    主题链接: http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS   Memory Limit: 10000K To ...

  5. poj 1236 Network of Schools (强连通分支缩点)

    Description A number of schools are connected to a computer network. Agreements have been developed ...

  6. POJ - 1236 Network of Schools

    A number of schools are connected to a computer network. Agreements have been developed among those ...

  7. poj 1236 Network of Schools

    题目描述:有一些学校连接到一个计算机网络.这些学校之间达成了一个协议:每个学校维护着一个学校列表,它向学校列表中的学校发布软件.注意,如果学校B在学校A的列表中,则A不一定在B的列表中.任务A:计算为 ...

  8. poj 1236 Network of Schools

    强联通分量模版题,tarjan算法: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 110 4 5 int n ...

  9. 洛谷 P2746 [USACO5.3]校园网Network of Schools (Tarjan,SCC缩点,DAG性质)

    P2746 [USACO5.3]校园网Network of Schools https://www.luogu.org/problem/P2746 题目描述 一些学校连入一个电脑网络.那些学校已订立了 ...

最新文章

  1. 20160722noip模拟赛alexandrali
  2. GitHub标星14000+,阿里开源的SEATA如何应用到极致?
  3. TFS 路径...已在工作区...
  4. 2440启动文件分析
  5. luna16标签数据里的xyz,以及CT的dicom.ImagePositionPatient里的三个值分别代表哪些轴的初始点
  6. Flink官方文档学习(三):Standalone Cluster 集群部署
  7. android学习资料_知乎上的高能Android学习资源来了,屏幕适配,性能优化,热修复NDk...
  8. android刷机教程 华为,华为的安卓手机该怎么刷机
  9. python实现网页表单填写_python在网页中自动填充表单
  10. 用php搭建微信公众号,用PHP搭建一个自己的微信公众号
  11. CANoe如何查看总线负载率?
  12. H5经纬度百度定位不准问题
  13. 【产品笔记】2.互联网产品修炼
  14. A律十三折线法G711编解码介绍
  15. Linux 必知必会
  16. oracle内存管理模式amm,Oracle 11g自动内存管理(AMM)相关的初始化参数
  17. 逐梦....圈圈圈圈圈
  18. 老李的博客在这里安家了
  19. 计算机专业评测绘工程师,如何成为测绘工程师
  20. html边框环绕一周动画,环绕式CSS边框动画

热门文章

  1. unity2d随机生成物体_平面测量路径生成的4种方式
  2. ondestroy什么时候调用_JavaScript基础——你真的清楚JavaScript是什么吗?
  3. 系统快捷方式java_java中这么创建界面快捷方式图标 代码
  4. 在Linux添加网卡,Centos(RHEL) 6 添加网卡的方法
  5. php表单的提交方法有什么,php – 确定哪个表单已提交的最佳方法是什么?
  6. STM8 ADC转换模式-------带缓存的连续模式
  7. 将MfgTool工具改造为自己的烧写工具
  8. 数据结构-链表的删除和添加
  9. 百面机器学习 #3 经典算法:01-1 线性可分(硬间隔)支撑向量机SVM
  10. SQL Server Profiler(二)