POJ1236 network of schools
100个学校,有单向网络连接,从而分享软件。
问题一:几个学校得到软件就可使所有学校都得到?
问题二:再加几条单向网络可以使得“任意学校得到软件,就可使得所有学校都有软件”?
——————————————————————————————————————————————————————————
强连通分量内部可做到“一点得,全部得”,从而可以看做一个点,所以,缩点,得到有向无环图。
在图中,入读为0的点因为无人与他分享,所以必须直接获得——问题一答案。
想要“一点得,全部得”,就要全部点成为一个强连通分量,加边的多少由入读为0的点数和出度为0的点数的最大值决定。——问题二答案
注意:如果所有点本身就是强连通分量,需要特判。
——————————————————————————————————————————————————————————
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack> using namespace std;
const int maxn=;
int n;
struct edge
{
int u,v,next;
}e[],ee[];
int head[],headd[],js,jss;
int dfsn[],low[],visx;
stack<int>st;
bool ins[];
int chudu[],rudu[];
int sshu,belong[];
void addage(int u,int v,edge e[],int head[],int &js)
{
e[++js].u=u;e[js].v=v;
e[js].next=head[u];head[u]=js;
}
void tarjan(int u)
{
dfsn[u]=low[u]=++visx;
st.push(u);
ins[u]=;
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].v;
if(dfsn[v]==)
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(ins[v] && low[u]>dfsn[v])low[u]=dfsn[v];
}
if(dfsn[u]==low[u])
{
sshu++;
int tp;
do
{
tp=st.top();
st.pop();
ins[tp]=;
belong[tp]=sshu;
}
while(tp!=u);
}
}
int main()
{
scanf("%d",&n);
for(int v,i=;i<=n;i++)
{
while(scanf("%d",&v)== && v!=)
{
addage(i,v,e,head,js);
}
}
for(int i=;i<=n;i++)
if(dfsn[i]==)tarjan(i);
for(int i=;i<=js;i++)
{
int u=e[i].u,v=e[i].v;
if(belong[u]!=belong[v])
{
addage(belong[u],belong[v],ee,headd,jss);
chudu[belong[u]]++;rudu[belong[v]]++;
}
}
int chudu0=,rudu0=;
for(int i=;i<=sshu;i++)
{
if(chudu[i]==)chudu0++;
if(rudu[i]==)rudu0++;
}
printf("%d\n",rudu0);
if(sshu==)printf("0\n");
else printf("%d\n",max(chudu0,rudu0));
return ;
}
POJ1236 network of schools的更多相关文章
- P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools
P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学 ...
- poj-1236.network of schools(强连通分量 + 图的入度出度)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 27121 Accepted: 10 ...
- POJ1236 - Network of Schools tarjan
Network of Schools Time Limit: 1000MS Memory Limi ...
- POJ1236 Network of Schools (强连通)(缩点)
Network of Schools Time Limit: 1000MS ...
- POJ-1236 Network of Schools,人生第一道Tarjan....
Network of Schools 题意:若干个学校组成一个计算机网络系统,一个学校作为出发端连接着若干个学校,信息可以传送到这些学校.被链接的学校不需要再次与出发端相连,现在问你:A:最少选几个学 ...
- POJ1236 Network of Schools —— 强连通分量 + 缩点 + 入出度
题目链接:http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K Tot ...
- POJ1236 Network of Schools (强连通分量,注意边界)
A number of schools are connected to a computer network. Agreements have been developed among those ...
- [POJ1236]Network of Schools(并查集+floyd,伪强连通分量)
题目链接:http://poj.org/problem?id=1236 这题本来是个强连通分量板子题的,然而弱很久不写tarjan所以生疏了一下,又看这数据范围觉得缩点这个事情可以用点到点之间的距离来 ...
- poj1236 Network of Schools【强连通分量(tarjan)缩点】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4316263.html ---by 墨染之樱花 [题目链接]http://poj.org/pr ...
随机推荐
- 提交到github远程仓库遇到的问题
1.could not read from remote repository 可能原因是没有将ssh 密匙添加到github,所以没有权限 解决办法: 1. ssh-keygen -C 'your@ ...
- 使用VS2013逆向生成UML类图
引自http://blog.csdn.net/funnyfu0101/article/details/7705173 首先.打开工程,[体系结构]->[新建关系图] 生成一个类图 然后[体系结构 ...
- 集成IC刷卡器经验
因为一系列的原因,IC刷卡器要渐渐地取代磁条刷卡器.公司在这方面也是需要跟进的,在我负责集成IC刷卡器到应用程序的过程中,积累了些经验,现在分享下. 第一:无论是磁条还是IC刷卡器都是刷卡器的一种,所 ...
- Hadoop_配置_linux下编译eclipse插件
使用的hadoop版本为hadoop-1.2.1(对应的含源码的安装包为hadoop-1.2.1.tar.gz) 将hadoop和eclipse都解压在home中的用户目录下 /home/chen/h ...
- Struts2:效验器——声明式
就是用xml配置的方式,而不是Java代码的形式,那个是“编程式” Action: package org.ah.s2; import com.opensymphony.xwork2.ActionSu ...
- 十二、shapes
1. The control points are attributes on the shape which are usually arrays of points. Control points ...
- Linux系统安全保护措施
1.系统安全记录文件 操作系统内部的记录文件是检测是否有网络入侵的重要线索.如果系统是直接连接到Internet的,且发现有很多人对系统做telnet/FTP登录尝试,可以运行“#more/var/s ...
- jquery 农历日历 可自适应
在网上找了许多大牛做的农历日历,但是不是不符合项目中的要求,就是本身就有问题有Bug ,把大牛门的做日历看了n遍 自己又改造了一遍得到了这个:随后日历又要做个自适应的长宽,又在js中改造代码..... ...
- 普通图片预览及demo(非分块)
演示地址: http://codeman35.itongyin.com:19003/v2/image.html 功能:通过加载大图预览,这种方式无法和google art 比较.只能应用于简单的图片预 ...
- 初学Python之os模块
OS模块是一个系统操作模块,是对本机的一些操作 os.name 显示操作系统,window:nt ,Linux/Unix:posix. os.getcwd() 显示运行的工作路径 os.list ...