洛谷 P2812 校园网络【[USACO]Network of Schools加强版】 解题报告
P2812 校园网络【[USACO]Network of Schools加强版】
题目背景
浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件。但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们。
题目描述
共有n所学校(n<=10000)已知他们实现设计好的网络共m条线路,为了保证高速,网络是单向的。现在请你告诉他们至少选几所学校作为共享软件的母机母鸡,能使每所学校都可以用上。再告诉他们至少要添加几条线路能使任意一所学校作为母机母鸡都可以使别的学校使用上软件。
输入输出格式
输入格式:
第一行一个整数n。
接下来n行每行有若干个整数,用空格空格隔开。
第i-1行的非零整数x,表示从i到x有一条线路。以0作为结束标志。
输出格式:
第一行一个整数表示问题1的答案。
第二行回答问题2.
我们当然选择在入度为0的点安放母鸡,因为没人能管它们。
但仅仅在入度为0的点放是不够的,因为若构成了一个进不去的环,同样也是不行的。
那行,先tarjan把环缩掉,则入度为0的点之和即为答案1。
答案2我们依旧贪心来想。
我们把出度为0的点连到入度为0的点上去,就构成了强连通分量。
然后把剩下的多的出度或者入度为0的点的个数加上去就行。
code:
#include <cstdio>
int max(int x,int y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}
const int N=10010;
int n;
struct node
{
int to,next;
}edge0[N*5];
int head0[N],cnt0=0;
int add0(int u,int v)
{
edge0[++cnt0].next=head0[u];edge0[cnt0].to=v;head0[u]=cnt0;
}
int s[N],tot=0;
void push(int x){s[++tot]=x;}
void pop(){tot--;}
int dfn[N],low[N],index=0,time=0,vis[N],in[N],out[N],ha[N];
void tarjan(int now)
{
push(now);
vis[now]=1;
dfn[now]=low[now]=++time;
for(int i=head0[now];i;i=edge0[i].next)
{
int v=edge0[i].to;
if(!dfn[v]) {tarjan(v);low[now]=min(low[v],low[now]);}
else if(vis[v]) {low[now]=min(dfn[v],low[now]);}
}
if(dfn[now]==low[now])
{
index++;
while(s[tot]!=now)
{
ha[s[tot]]=index;
vis[s[tot]]=0;
pop();
}
ha[s[tot]]=index;
vis[s[tot]]=0;
pop();
}
}
int main()
{
scanf("%d",&n);
int V;
for(int i=1;i<=n;i++)
{
scanf("%d",&V);
while(V)
{
add0(i,V);
scanf("%d",&V);
}
}
for(int i=1;i<=n;i++)
if(!dfn[i])
tarjan(i);
for(int i=1;i<=n;i++)
for(int j=head0[i];j;j=edge0[j].next)
{
int v=edge0[j].to;
if(ha[i]!=ha[v])
{
out[ha[i]]++;
in[ha[v]]++;
}
}
int ans1=0,ans2=0;
for(int i=1;i<=index;i++)
{
if(!in[i]) ans1++;
if(!out[i]) ans2++;
}
printf("%d\n%d\n",ans1,max(ans1,ans2));
return 0;
}
2018.6.6
洛谷 P2812 校园网络【[USACO]Network of Schools加强版】 解题报告的更多相关文章
- 洛谷P2812校园网络【Network of Schools加强版】
题目背景 浙江省的几所\(OI\)强校的神犇发明了一种人工智能,可以\(AC\)任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被\(♂\)掏\(♂\)空,他 ...
- 洛谷—— P2812 校园网络
P2812 校园网络 题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮 ...
- 洛谷P2812 校园网络[数据加强版] [Tarjan]
题目传送门 校园网络 题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮 ...
- 洛谷P2812校园网络
传送门啦 其实这个题只要读懂分析好题意就不是很难. 就是将一个有向图进行缩点操作,把一个强连通分量看成一个点,求入度为 0 的点和出度为 0 的点各有多少. 在这里先向大家推荐两个题目,建议大家先去看 ...
- 洛谷 P2746 [USACO5.3]校园网Network of Schools 解题报告
P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作"接受学校&q ...
- 洛谷 P2746 [USACO5.3]校园网Network of Schools (Tarjan,SCC缩点,DAG性质)
P2746 [USACO5.3]校园网Network of Schools https://www.luogu.org/problem/P2746 题目描述 一些学校连入一个电脑网络.那些学校已订立了 ...
- 洛谷1601 A+B Problem(高精) 解题报告
洛谷1601 A+B Problem(高精) 本题地址:http://www.luogu.org/problem/show?pid=1601 题目背景 无 题目描述 高精度加法,x相当于a+b pro ...
- P2812 校园网络【[USACO]Network of Schools加强版】
题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们. 题目描述 共 ...
- luogu P2812 校园网络【[USACO]Network of Schools加强版】|Tarjan
题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们. 题目描述 共 ...
随机推荐
- ElasticSearch5.5.1插件分类
ElasticSearch5.5.1插件分类 附官网介绍:https://www.elastic.co/guide/en/elasticsearch/plugins/5.5/intro.html 一. ...
- Mybatis 中 columnPrefix别名的用法
1.映射对应的属性,区分他们分别属于哪些类.(sql书写的时候为什么要将前缀加上(别名),是因为便于它去寻找哪个类的前缀是ANNEX_) 2.例: 如下所示当一个collection 定义了一个co ...
- 前端安全之XSS
XSS定义 XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内执行的JS代码时,就发生了XSS攻 ...
- vue全局 关键字搜索 v-search
一款基于 vuejs & weui 的全屏搜索组件:https://www.npmjs.com/package/vue-search
- Stanford Word Segmenter的特定领域训练
有没有人自己训练过Stanford Word Segmenter分词器,因为我想做特定领域的分词,但在使用Stanford Word Segmenter分词的时候发现对于我想做的领域的一些词分词效果并 ...
- M1阶段个人总结
经过4周的开发,我们团队的第一阶段已经结束了. 这一个月来我由于其他事情较多,所以开发的工作主要交给了另外的三名同学. 我主要负责制定代码规范和工程结构,通过github来跟进项目进度,提供一些技术支 ...
- Python学习笔记——Python Number(数字)
Python Number 类型转换 int(x, y) #将x转换为一个整数,y为进制数.如 int('11',2)将二进制数的11转成十进制数的整数,结果为3 long(x, y) #将x转换为一 ...
- 虚拟机Linux(centos)系统能ping通主机,主机无法ping通Linux解决方案
本文引用:https://blog.csdn.net/clean_water/article/details/53023308 三个步骤: 第一步:虚拟机网络连接方式选择Nat 第二步.关闭liunx ...
- Maven项目中添加JDBC驱动
在pom.xml配置文件中添加: <dependency> <groupId>mysql</groupId> <artifactId>mysql-con ...
- Java Configuration Manager Automatic Reloading
公司一个项目的从另外一个小公司,拷贝了一个PropertyParser的类,实现的有问题,必须重启java应用才能读取新的配置. 简单的解决办法,就是每次读任何配置项时,都重新加载xxx.proper ...