poj 1236 Network of Schools(又是强连通分量+缩点)
http://poj.org/problem?id=1236
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 9481 | Accepted: 3767 |
Description
Input
Output
Sample Input
- 5
- 2 4 3 0
- 4 5 0
- 0
- 0
- 1 0
Sample Output
- 1
- 2
Source
- /**
- Judge Status:Accepted Memory:772K
- Time:0MS Language:G++
- Code Length:2155B Author:cj
- */
- #include<iostream>
- #include<stdio.h>
- #include<stack>
- #include<string.h>
- #include<algorithm>
- #include<vector>
- #define N 110
- using namespace std;
- vector<int> G[N];
- int pre[N],lowlink[N],sccno[N],dfs_cnt,scc_cnt;
- stack<int> stk;
- int visit[N][N],in[N],out[N];
- void Tarjan(int u)
- {
- pre[u] = lowlink[u] = ++dfs_cnt;
- stk.push(u);
- int i;
- for(i=;i<G[u].size();i++)
- {
- int v = G[u][i];
- if(!pre[v])
- {
- Tarjan(v);
- lowlink[u] = min(lowlink[u],lowlink[v]);
- }
- else if(!sccno[v])
- {
- lowlink[u] = min(lowlink[u],pre[v]);
- }
- }
- if(pre[u]==lowlink[u])
- {
- int x;
- scc_cnt++;
- do
- {
- x = stk.top();
- stk.pop();
- sccno[x] = scc_cnt;
- }while(x!=u);
- }
- }
- void findncc(int n)
- {
- dfs_cnt = scc_cnt = ;
- memset(pre,,sizeof(pre));
- memset(lowlink,,sizeof(lowlink));
- memset(sccno,,sizeof(sccno));
- int i;
- for(i=;i<=n;i++) if(!pre[i]) Tarjan(i);
- }
- void getNewMap(int n)
- {
- int i,j;
- memset(visit,,sizeof(visit));
- memset(in,,sizeof(in));
- memset(out,,sizeof(out));
- for(i=;i<=n;i++)
- {
- for(j=;j<G[i].size();j++)
- {
- int v = sccno[G[i][j]];
- int u = sccno[i]; //注意是对sccno[i]数组里的强联通分量进行操作,也就是缩点的过程
- if(u!=v)
- {
- if(!visit[u][v])
- {
- visit[u][v] = ;
- in[v]++; //出度入度统计
- out[u]++;
- }
- }
- }
- }
- }
- int main()
- {
- int n;
- scanf("%d",&n);
- int i;
- for(i=;i<=n;i++)
- {
- int a;
- G[i].clear();
- while(~scanf("%d",&a)&&a)
- {
- G[i].push_back(a);
- }
- }
- findncc(n);
- getNewMap(n);
- int cnt_in = ,cnt_out = ;
- for(i=;i<=scc_cnt;i++)
- {
- if(!in[i]) cnt_in++;
- if(!out[i]) cnt_out++;
- }
- printf("%d\n",cnt_in);
- if(scc_cnt!=) printf("%d\n",max(cnt_in,cnt_out)); //联通分量只有一个输出0
- else printf("0\n");
- return ;
- }
poj 1236 Network of Schools(又是强连通分量+缩点)的更多相关文章
- poj 1236 Network of Schools (强连通分量+缩点)
题目大概: 每个学校都可以把软件复制好,交给它名单上的学校. 问题A:把软件复制成几份,然后交给不同的学校,所有学校才能够都有软件. 问题B:添加几条边,能使得这个图变成强连通图. 思路: 找出所有的 ...
- 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缩点)
传送门 Description A number of schools are connected to a computer network. Agreements have been develo ...
- POJ 1236 Network of Schools 有向图强连通分量
参考这篇博客: http://blog.csdn.net/ascii991/article/details/7466278 #include <stdio.h> #include < ...
- poj 1236 Network of Schools(强连通、缩点、出入度)
题意:给出一个有向图.1:问至少选出多少个点,才能沿有向边遍历所有节点.2:问至少加多少条有向边,使原图强连通. 分析:第一个问题,缩点后找所有树根(入度为0).第二个问题,分别找出入度为0和出度为0 ...
- poj 1236 Network of Schools【强连通求孤立强连通分支个数&&最少加多少条边使其成为强连通图】
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13800 Accepted: 55 ...
- POJ 1236.Network of Schools (强连通)
首先要强连通缩点,统计新的图的各点的出度和入度. 第一问直接输出入度为0的点的个数 第二问是要是新的图变成一个强连通图,那么每一个点至少要有一条出边和一条入边,输出出度和入度为0的点数大的那一个 注意 ...
- POJ 1236 Network of Schools (tarjan算法+缩点)
思路:使用tarjan求强连通分量并进行缩点,判断所有入度为0的点,这个点就是必须要给予文件的点,分别计算出度,入度为零的点的个数,取二者的最大值就是把这个图变成强连通需要加的边数. 一个取值需要讨论 ...
随机推荐
- 使用C#动态生成Word文档/Excel文档的程序测试通过后,部署到IIS服务器上,不能正常使用的问题解决方案
使用C#动态生成Word文档/Excel文档的程序功能调试.测试通过后,部署到服务器上,不能正常使用的问题解决方案: 原因: 可能asp.net程序或iis访问excel组件时权限不够(Ps:Syst ...
- 在web界面调用水晶报表导出文件时莫名错误
原因是水晶报表未破解版有字段限制,不能超过90(具体个数没仔细测)个字段. 建议那些select *的朋友检查一下字段个数
- <转载>提升程序的特权(AdjustTokenPrivileges)
首先列出需要的函数 1.OpenProcessToken 2.AdjustTokenPrivileges 3. LookupPrivilegeValue ----------------------- ...
- 第四十四篇、iOS开发中git添加.gitignore文件
.gitignore文件可以直接使用https://github.com/github/gitignore 1.在项目中设置忽略文件(1)将从github上荡下来的对应的.gitignore文件(Sw ...
- C# @符号的多种使用方法
1.限定字符串用 @ 符号加在字符串前面表示其中的转义字符“不”被处理.如果我们写一个文件的路径,例如"D:/文本文件"路径下的text.txt文件,不加@符号的话写法如下:str ...
- java内部类的定义原则
/*内部类的访问规则:1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this2,外部类要访问内部类,必 ...
- opencv 手写选择题阅卷 (四)Android端 手机应用开发
opencv 手写选择题阅卷 (四)Android 手机应用开发 在PC端把代码调通以后开始开发Android 手机应用,因为主要功能代码为C++代码,所以需要通过NDK编译,JAVA通过JNI方式调 ...
- 【转帖】error C2296: “^”: 非法,左操作数包含“double”类型
想要实现 ,写的C++程序为 double x; x=2^3; 结果程序总是出现这样的错误:error C2296: “^”: 非法,左操作数包含“double”类型 后来才发现操作符“^”,在C++ ...
- Kubernetes Architecture
reference:https://www.symantec.com/connect/blogs/google-kubernetes-analytical-evaluation
- 5步解决移动设备上的300ms点击延迟
译者:jmouse 大多数基于触摸的浏览器设备,在点击时都会有个 300ms 的事件触发等待时间,做过 web app 开发的同学应该都遇到过这个情况,通过下面的5步可以轻松搞定这个延迟. 1.不要太 ...