【COGS908】校园网

Description

一些学校连入一个电脑网络。那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”)。注意如果 B 在 A 学校的分发列表中,那么 A 不必也在 B 学校的列表中。

你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软件,必须接受新软件副本的最少学校数目(子任务 A)。更进一步,我们想要确定通过给任意一个学校发送新软件,这个软件就会分发到网络中的所有学校。为了完成这个任务,我们可能必须扩展接收学校列表,使其加入新成员。计算最少需要增加几个扩展,使得不论我们给哪个学校发送新软件,它都会到达其余所有的学校(子任务 B)。一个扩展就是在一个学校的接收学校列表中引入一个新成员。

Input

输入文件的第一行包括一个整数 N:网络中的学校数目(2 <= N <= 100)。学校用前 N 个正整数标识。接下来 N 行中每行都表示一个接收学校列表(分发列表)。第 i+1 行包括学校 i 的接收学校的标识符。每个列表用 0 结束。空列表只用一个 0 表示。

Output

你的程序应该在输出文件中输出两行。第一行应该包括一个正整数:子任务 A 的解。第二行应该包括子任务 B 的解。

Sample Input


2 4 3 0
4 5 0
0

1 0

Sample Output

1
2

题解

tarjan 缩点重构图 第一问求有多少个联通块入度为0

第二问 为了使整个图构成一个连通块,最有效的方法是在入度为0和出度为0的块间连一条边,求出 max(入度为0块的个数,出度为0块的个数) 即可

注意特判当整个图都是一个联通块的情况

#include<iostream>
#include<cstdio>
#define N 110
using namespace std;
struct edge_node
{
    int next, to;
}e[N],d[N];
int head[N],h[N];
bool instack[N];
int stack[N],low[N],dfn[N];
int belong[N],size[N],rudu[N],chudu[N];
int index,top,scc,cnt;

void tarjan(int u)
{
    dfn[u] = low[u] = ++index;
    instack[u] = true;
    stack[++top] = u;
    for (int i=head[u];i;i=e[i].next)
    {
        int v=e[i].to;
        if (instack[v])
        {
            low[u] = min(dfn[v],low[u]);
        }
        if (dfn[v] == 0)
        {
            tarjan(v);
            low[u] = min(low[v],low[u]);
        }
    }
    if(low[u] == dfn[u])
    {
        ++scc; //
        int t = 0;
        for (;u != t;)
        {
            t = stack[top--];
            instack[t] = false;
            belong[t] = scc;
            size[scc] ++;
        }
    }
}
int main()
{
    freopen("schlnet.in","r",stdin);
    freopen("schlnet.out","w",stdout);
    int n;
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        for (int x;scanf("%d",&x) && x;)
        {
            e[++cnt].to = x;
            e[cnt].next = head[i];
            head[i] = cnt;
        }
    }
    for (int i=1;i<=n;i++)
        if (dfn[i] == 0) tarjan(i);
    cnt = 0;
    for (int i=1;i<=n;i++)
        for (int j=head[i];j;j=e[j].next)
        {
            int v = e[j].to;
            if (belong[i] != belong[v])
            {
                d[++cnt].to = belong [v];
                d[cnt].next = h[belong[i]];
                h[belong[i]] = cnt;
                rudu[belong[v]] ++;
                chudu[belong[i]] ++;
            }
        }
    int ans1 = 0,ans2 = 0;
    for (int i=1;i<=scc;i++)
    {
        if (!rudu[i]) ans1 ++;
        if (!chudu[i]) ans2 ++;
    }
    if (scc == 1) printf("1\n0");
    else printf("%d\n%d",ans1,max(ans1,ans2));
}
时间: 2024-11-14 13:05:31

【COGS908】校园网的相关文章

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

校园网数据库安全方案

背景 最近<经济参考报>报道我国高校成为信息泄漏的重灾区,自2014年至2015年3月,漏洞分析平台补天显示的有效高校网站漏洞多达3495个.这些漏洞有的已造成教职员工或学生个人信息泄漏.西安交通大学信息安全法律研究中心主任马民虎表示,一方面高校涉及人数众多,并且包括大量学生和教授的隐私信息:另一方面很多重要院校还承担着国家众多科研和军工项目,这些都可能成为不法分子的目标. 随着校园信息化的快速建设,教育云犹如雨后春笋涌现,虚拟化也带来了安全问题:业务网络边界消失.传统安全措施无法部署.数据集

郑大校园网怎么实现xshell连接vmware下的ubnutu

要想使用网络,必须是无线校园网,不使用网络也可连接 安好虚拟机和ubnutu之后,设置虚拟机网络配置为NAT 在虚拟机编辑栏选择虚拟网络编辑,设置vmnet8 为NAT模式 回到ubnutu虚拟机安装ssh,apt-get install ssh,并配置静态IP地址 然后回到xshell添加登录项即可 注意:要想登录不能禁用虚拟机的两个虚拟网卡

锐捷linux客户端常用命令(主要用来连接校园网或公司局域网)

锐捷访问校园网,.sh脚本文件rjsu*.sh-u 用户名-P 密码-S 参数1保存密码参数0不保存密码 其实: 直接使用md5认证方式输入用户名密码并且配置好ip之后,重新打开网卡即可有一定几率连接到校园网.

利用Python正则匹配中文——爬取校园网公告栏中感兴趣的内容

写这个程序是因为校园网公告栏时不时会有学术报告,讲座之类的信息发布,但这类信息往往发布在讲座的前一天,以至于丢失很多重要消息.同时公告栏里也会发布一些跟学生无关的内容,比如工会主席会议啥的. 主要遇到的困难时对中文的正则匹配问题.(比如通过第一次正则可以提取到一个页面内的所有中文标题,第二次正则从这些中文标题中将能匹配上“报告”两个字的对象添加到结果list内) 学校公告页面是gb2312编码.我使用的方式是,整个工程使用utf-8编码,将需要匹配的关键字转换成utf-8编码格式,使用正则匹配u

校园网小记

校园认证程序频繁报错,一开始以为是进程的问题后来 找到原因 因为是克隆的mac  不知什么原因导致 mac地址复原了  eth0变成了  eth1 [email protected]:~# leafpad /etc/udev/rules.d/70-persistent-net.rules 打开 注释掉 旧的  吧新的改成eth0  成功 校园网小记,布布扣,bubuko.com

转载:校园网接入认证技术对比与分析

原文作者: 沙捷 费青松 王雁 作者单位:首都体育学院 信息网络中心 北京市海淀区北三环西路 11号 100088 1 概述 Internet网络是一个自助网络,免费使用,一个用户终端配置IP地址即可接入网络.IP网络规模的扩大使得管理问题凸现,而不管是运营商的IP城域网还是校园网都有运营收费的需求,但是 在校园网中引入用户认证技术,有两个目的,一是可以有效的识别上网用户身份,第二是便于对用户的接入权限.业务权限.用户行为等进行有效的控制和管理,包括提供灵活的计费手段.基于IP地址的用户管理显然

【转】Kubuntu 使用YaH3C进行中大校园网认证

原文地址: http://www.cnblogs.com/chenbjin/p/4096231.html 之前都是用路由器连网线上网,我也没注意到inode校园网客户端在linux上的问题.直到前两天把路由器给搞残废了,只能默默的找办法装inode.根据学校网络中心给的教程,在kubuntu上尝试安装inode居然出现错误,上不了网.通过网上各种求助贴,才知道inode在Linux下仅仅支持Ubuntu 32位系统,而且使用的库会出现冲突,顿时无爱了. 人间处处有真爱,一打听身边很多同学都搞过这

校园网使用IPV6 tunnel免流量上网

前段时间购买了一个vps,做梯子感觉不错,但是在校园网内,vps流量远超10块钱校园流量,眼看着上个月vps的流量被清零.但是校园网有免费的IPV6,而我的VPS也有个IPV6的地址,于是乎就想着如何通过IPV6免费上网. 第一步就遇到了问题,在vps上ping ipv6.google.com,ping不通,100%lost. 但ifconfig 明明可以看到我的IPV6地址,上网查了一些资料,说是ipv6 module没有编译到内核,所以无法使用ipv6.但是由由于vps是基于openvz的便