洛谷 P2746 [USACO5.3]校园网 Network of Schools 题解
Tarjan 模板题
第一问就是缩点之后看有多少个入度为零的点就好了。
第二问是在缩点后将每个点的入度和出度都求出(只要有入度或出度就置为1),然后比较哪个有值的多,将多的作为答案输出。原因是由题可得,要使缩完的点也构成一个强连通分
量,即入度和出度都大于等于1。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 10010
using namespace std;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
struct node
{
int v,nex;
}edge[maxn];
int n,cnt,inl,top,res1,res2,num,cd2,rd2;
int head[maxn],st[maxn],low[maxn],dfn[maxn],inn[maxn],si[maxn],rd[maxn],cd[maxn];
inline void add(int x,int y)
{
cnt++;
edge[cnt].v=y;
edge[cnt].nex=head[x];
head[x]=cnt;
}
inline void Tarjan(int from)
{
dfn[from]=low[from]=++num;
st[++top]=from;
for(int i=head[from];i!=-;i=edge[i].nex)
{
int to=edge[i].v;
if(!dfn[to])
{
Tarjan(to);
low[from]=min(low[from],low[to]);
}
else if(!inn[to])
low[from]=min(low[from],dfn[to]);
}
if(low[from]==dfn[from])
{
inn[from]=++inl;
++si[inl];
while(st[top]!=from)
{
++si[inl];
inn[st[top]]=inl;
--top;
}
--top;
}
}
int main()
{
memset(head,-,sizeof(head));
n=read();
for(int i=;i<=n;i++)
{
int x;
while()
{
x=read();
if(x!=)add(i,x);
else break;
}
}
for(int i=;i<=n;i++)
if(!dfn[i])
Tarjan(i);
for(int i=;i<=n;i++)
for(int j=head[i];j!=-;j=edge[j].nex)
{
if(inn[i]!=inn[edge[j].v])
{
rd[inn[edge[j].v]]++;
cd[inn[i]]++;
} }
if(inl==)
{
cout<<<<endl<<;
return ;
}
for(int i=;i<=inl;i++)
if(rd[i]==)
res1++;
write(res1);
cout<<endl;
for(int i=;i<=inl;i++)
{
if(cd[i]==)
cd2++;
if(rd[i]==)
rd2++;
}
res2=max(cd2,rd2);
write(res2);
return ;
}
请各位大佬斧正(反正我不认识斧正是什么意思)
洛谷 P2746 [USACO5.3]校园网 Network of Schools 题解的更多相关文章
- 洛谷 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 题目描述 一些学校连入一个电脑网络.那些学校已订立了 ...
- 洛谷P2746 [USACO5.3]校园网Network of Schools
题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...
- 洛谷 P2746 [USACO5.3]校园网Network of Schools
题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...
- 洛谷 P2746 [USACO5.3]校园网Network of Schools schlnet Tarjan强连通分量
schlnet ★★★ 输入文件:schlnet.in 输出文件:schlnet.out 简单对比时间限制:1 s 内存限制:128 MB 描述 一些学校连入一个电脑网络.那些学校已订 ...
- luogu P2746 [USACO5.3]校园网Network of Schools 题解
前言: 火星题... 但是我调了半天,最后看了题解才明白. Wtcl 解析: 显然先缩个点. 第一问,就是问多少入度为0的点. 第二问,抽象一下就是要添加一些边,让一个DAG变成一个SCC,求最小边数 ...
- P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools
P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学 ...
- P2746 [USACO5.3]校园网Network of Schools(Tarjan)
P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 ...
- 洛谷P2746 USACO5.1 校园网
题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...
随机推荐
- C语言conio.h部分解释
#include <conio.h> int getch(void);// 从控制台得到下一个字符,以ASCII值返回,并不在屏幕显示该字符 int getche(void);// 从控制 ...
- SpringBoot获得application.properties中数据的几种方式
转:https://blog.csdn.net/qq_27298687/article/details/79033102 SpringBoot获得application.properties中数据的几 ...
- Js的iframe相关问题,如何判断当前是否在iframe中,iframe和它的父窗口如何通信
一.前言: 在web中,为了丰富我们的内容,往往需要引用其它HTML文件,这时候就需要用到 iframe 标签,本文就主要记录一下使用iframe所需要注意的问题 iframe 所使用的环境(笔者所遇 ...
- easy ui 弹框叠加问题
1.框架用的是.net MVC,Index页面如下所示: @{ Layout = "~/Views/Shared/_CustomerLayout.cshtml"; ViewBag. ...
- requirejs:模块加载(require)及定义(define)时的路径理解
给新来的实习生普及下JS基本知识,看到比较好的文章 转载https://blog.csdn.net/xuxiaoping1989/article/details/52384778 接触过require ...
- ASUS笔记本,更换了固态硬盘,重装系统前后开机都自动进入BIOS界面
解决方法:advanced标签中sata configration回车进入,如有识别硬盘设备,按F9恢复BIOS默认设置,按F10保存后重启. 如有自行安装过系统,Security-Secure Bo ...
- CSS-盒模型与文本溢出笔记
注意点: 文本居中: text-align:center:文本左右居中 line-heigh:30px; 等于容器高度时,单行文本上下居中 margin:0 auto: 浏览器居中 清除margin ...
- k8s维护常用命令
k8s维护 1. 不可调度 kubectl cordon k8s-node-1 kubectl uncordon k8s-node-1 #取消 2.驱逐已经运行的业务容器 kubectl drain ...
- python通过装饰器检查函数参数的数据类型的代码
把内容过程中比较常用的一些内容记录起来,下面内容段是关于python通过装饰器检查函数参数的数据类型的内容. def check_accepts(f): assert len(types) == f. ...
- Gitlab 重置 root 密码
要重置root密码,请先使用root权限登录服务器.使用以下命令启动Ruby on Rails控制台: gitlab-rails console production 等到控制台加载完毕,您可以通过搜 ...