洛谷 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任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们. 题目描述 共 ...
随机推荐
- BootStrap学习(4)_分页&标签&缩略图&警告&进度条
一.分页 分页(Pagination),是一种无序列表,Bootstrap 像处理其他界面元素一样处理分页. .pagination --添加该 class 来在页面上显示分页. .disa ...
- 校内模拟赛 Attack's Fond Of LeTri
Attack's Fond Of LeTri 题意: n个房子m条路径边的无向图,每个房子可以最终容纳b个人,初始有a个人,中途超过可以超过b个人,每条边有一个长度,经过一条边的时间花费为边的长度.求 ...
- 微服务监控zipkin+asp.net core
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 监控目录:微服务监控zipkin.skywalking以及日志ELK监控系列 一.zipkin介绍 zipkin是一种分布式跟踪系 ...
- QQ群管理员申请帖(本次截止日期为2017-03-25)
本帖专门为技术交流群申请管理员专用. 管理员的权利: 1.有权在成员违规的情况下直接剔除. 2.有权加入多个交流群. 3.有权引人入群. 4.艾特全体是权利,但要慎用,通常情况下,没有我本人的授意,不 ...
- 【2016.4.6】结对编程 终章 THE END
- 基于Spring3 MVC实现基于form表单文件上传
http://blog.csdn.net/jia20003/article/details/8474374/
- 机器学习算法(KNN)
KNN简介 KNN(k-NearestNeighbor)算法的思想总结一下:就是在数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K ...
- JSTLView快速国际化(SpringMVC)
JSTLView:快速国际化:只要导入了jstl的jar包,以前默认创建的InternalResouceView都会被使用jstlView替代: 国际化的新步骤: 1).写好 ...
- Activiti的部署问题
http://www.kafeitu.me/activiti/2012/03/22/workflow-activiti-action.html 既可以通过每次Spring应用程序启动时,执行部署命令. ...
- js字符串和正则表达式
字符串的生成转换 你可以将任何类型的数据都转换为字符串,你可以用下面三种方法的任何一种: var myStr = num.toString(); // "19" var myStr ...