poj 1236 Network of Schools
题目描述:有一些学校连接到一个计算机网络。这些学校之间达成了一个协议:每个学校维护着一个学校列表,它向学校列表中的学校发布软件。注意,如果学校B在学校A的列表中,则A不一定在B的列表中。任务A:计算为使得每个学校都能通过网络收到软件,你至少需要准备多少份软件拷贝。任务B:考虑一个更长远的任务,想确保给任意一个学校发放一个新的软件拷贝,该软件拷贝能发布到网络中的每个学校。为了达到这个目标,必须在列表中增加新成员。计算需要添加新成员的最小数目。// 任务A就是求缩点后 入度为0的点的个数 // 任务B 就是让缩点后的图中出度或入度为0的点消失 那么只要出度为0的点和入度为0的点连 主要看哪种点多就是了#include <iostream> #include <algorithm> #include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <string.h> using namespace std; #define MOD 1000000007 #define maxn 60100 #define maxm 10010 struct Edge{int to;int next;Edge(){};Edge(int u,int v){to=u;next=v;} }E[maxn]; stack<int> S; int V[maxm],num; int belong[maxm]; int pre[maxm]; int dfst,scc; int ans; bool tag[maxm]; int in[maxm],out[maxm]; void init(int n){dfst=scc=0;num=0;ans=0;while(!S.empty())S.pop();for(int i=1;i<=n;i++){V[i]=-1;pre[i]=0;belong[i]=0;} } void add(int u,int v){E[num].to=v;E[num].next=V[u];V[u]=num++; } int tarjan(int u){int lowu=pre[u]=++dfst;int v,e;S.push(u);for(e=V[u];e!=-1;e=E[e].next){v=E[e].to;if(!pre[v]){int lowv=tarjan(v);lowu=min(lowu,lowv);}else if(!belong[v]) lowu=min(lowu,pre[v]);}if(lowu==pre[u]){scc++;for(;;){int x=S.top();S.pop();belong[x]=scc;if(x==u) break;}}return lowu; } int main() {int n,m,T;int u,v;int i,j=1;//scanf("%d",&T);while(scanf("%d",&n)!=EOF){// scanf("%d",&m); init(n);for(i=1;i<=n;i++){u=i;while(scanf("%d",&v),v){add(u,v);}}for(i=1;i<=n;i++)if(!pre[i]) tarjan(i);// for(i=1;i<=n;i++) printf("%d ",belong[i]);for(i=1;i<=scc;i++) out[i]=0,in[i]=0;int e,u,v;for(i=1;i<=n;i++){for(e=V[i];e!=-1;e=E[e].next){u=belong[i];v=belong[E[e].to];if(u!=v){in[v]++;out[u]++;//,printf("v=%d ",v);} }}int A=0,B=0;for(i=1;i<=scc;i++){if(!in[i]) A++;if(!out[i]) B++;}B=max(A,B);if(scc==1) B=0;// 特殊情况下 只有一个强连通分量 郁闷开始这里写成了nprintf("%d\n%d\n",A,B);}return 0; }
转载于:https://www.cnblogs.com/372465774y/p/3205747.html
poj 1236 Network of Schools相关推荐
- POJ 1236 Network of Schools(强连通 Tarjan+缩点)
POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意: 给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...
- [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(tarjan)
Network of Schools Description A number of schools are connected to a computer network. Agreements h ...
- POJ - 1236 Network of Schools
A number of schools are connected to a computer network. Agreements have been developed among those ...
- POJ 1236 Network of Schools(强连通分量缩点求根节点和叶子节点的个数)
Description: A number of schools are connected to a computer network. Agreements have been developed ...
- poj 1236 Network of Schools (强连通分支缩点)
Description A number of schools are connected to a computer network. Agreements have been developed ...
- POJ - 1236 Network of Schools(强连通缩点)
题目链接:点击查看 题目大意:一个学校连接在一个计算机网络上,学校之间存在软件支援协议,每个学校都有它应支援的学校名单(学校A支援学校B,并不表示学校B一定支援学校A).当某校获得一个新软件时,无论是 ...
- poj 1236 Network of Schools
强联通分量模版题,tarjan算法: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 110 4 5 int n ...
- pku 1236 Network of Schools (tarjan缩点)
http://poj.org/problem?id=1236 N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输,问题1:初始至少需要向多 ...
最新文章
- hdu4544 优先队列(小贪心)
- Jenkins中安装Role-based Authorization Strategy插件来实现用户角色权限管理
- varnish缓存服务器构建疑问
- XCTF-高手进阶区:Web_php_include
- python怎么显示汉字_mac在matplotlib中显示中文的操作方法
- 程序人生:教你写出让同事抓狂的代码
- 洛谷P3327:[SDOI2015]约数个数和(莫比乌斯反演)
- 计算机跨专业专插本学音乐,欢迎投稿丨专插本可以跨专业考,只要肯坚持!
- Cream Finance关于提高三个v2 yVaults的质押系数的提案已经完成
- codeforces 707D-(DFS+bitset)
- 读取jar包所在目录和jar包内文件
- Leader安排的三小时工作量,我如何用python十秒完成
- Ubuntun 18.04 NVIDIA显卡驱动安装
- 调整外接显示屏亮度的方法
- 2022年乡村医生考试精选模拟题及答案
- Linux 下 github 的使用
- echarts中国地图线性流动动画js特效
- java中如何添加画板背景图,在AI中怎么把已知图片在新建画板时候作为画板的背景来建立画板啊!...
- EIGRP特点包括:
- 银光类似web visio的节点连线控件Essential Diagram免费下载地址
热门文章
- (一)为什么你应该(从现在开始就)写博客
- 计算机游戏的英文单词,关于游戏的英语词汇
- 服务器如何运行java文件_在linux服务器上运行java文件
- zblog php标签,201502200101 zblogphp调整“显示常用标签”个数方法
- java 委托_动态代理:Java开发必学
- maven使用小技巧 optional
- 开发好还是实施好_公众号开发 选择模板好还是选择定制发好
- 至暗时刻鸿蒙初开,鸿蒙2.0面世,华为在“至暗时刻”迎来曙光
- JAVA用多线程反而变慢了_Java中使用多线程不能明显提高程序效率的一些原因
- 依赖注入Dagger2详解