前言:

火星题。。。

但是我调了半天,最后看了题解才明白。

Wtcl

解析:

显然先缩个点。

第一问,就是问多少入度为0的点。

第二问,抽象一下就是要添加一些边,让一个DAG变成一个SCC,求最小边数。

答案就是max(入度0的数量,出度0的数量)

震惊,我竟然没看出来,活到爆!

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn=1000000+10;
#define gc() (p1 == p2 ? (p2 = buf + fread(p1 = buf, 1, 1 << 20, stdin), p1 == p2 ? EOF : *p1++) : *p1++)
#define read() ({ register int x = 0, f = 1; register char c = gc(); while(c < '0' || c > '9') { if (c == '-') f = -1; c = gc();} while(c >= '0' && c <= '9') x = x * 10 + (c & 15), c = gc(); f * x; })
char buf[1 << 20], *p1, *p2;
int n,cnt,tot,top,ss,Time,sss;
struct node{
int to,nxt;
}edge[maxn<<1];
int head[maxn],belong[maxn],dfn[maxn],low[maxn],Stack[maxn],ind[maxn],outd[maxn];
bool vis[maxn];
void add(int from,int to){
edge[++cnt].to=to;
edge[cnt].nxt=head[from];
head[from]=cnt;
}
void tarjan(int u){
if(dfn[u]) return;
dfn[u]=low[u]=++Time;
vis[u]=1;
Stack[++top]=u;
for(int i=head[u];i;i=edge[i].nxt){
int v=edge[i].to;
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}else if(vis[v]) low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
tot++;
while(Stack[top+1]!=u){
int t=Stack[top];
top--;
vis[t]=0;
belong[t]=tot;
}
}
}
void Solve(){
scanf("%d",&n);
for(int i=1,x;i<=n;++i){
while(1){
scanf("%d",&x);
if(x==0) break;
add(i,x);
}
}
for(int i=1;i<=n;++i) tarjan(i);
for(int u=1;u<=n;++u){
for(int i=head[u];i;i=edge[i].nxt){
int v=edge[i].to;
if(belong[u]==belong[v]) continue;
ind[belong[v]]++;
outd[belong[u]]++;
}
}
for(int i=1;i<=tot;++i) if(ind[i]==0) ss++;
for(int i=1;i<=tot;++i) if(outd[i]==0) sss++;
int ans;
if(tot==1) ans=0;
else ans=max(ss,sss);
printf("%d\n%d\n",ss,ans);
}
int main(){
Solve();
return 0;
}

luogu P2746 [USACO5.3]校园网Network of Schools 题解的更多相关文章

  1. 【luogu P2746 [USACO5.3]校园网Network of Schools】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2812 注意:判断出入度是否为0的时候枚举只需到颜色的数量. 坑点:当只有一个强连通分量时,不需要再添加新边. ...

  2. luogu P2746 [USACO5.3]校园网Network of Schools

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...

  3. 洛谷 P2746 [USACO5.3]校园网 Network of Schools 题解

    Tarjan 模板题 第一问就是缩点之后看有多少个入度为零的点就好了. 第二问是在缩点后将每个点的入度和出度都求出(只要有入度或出度就置为1),然后比较哪个有值的多,将多的作为答案输出.原因是由题可得 ...

  4. 洛谷 P2746 [USACO5.3]校园网Network of Schools (Tarjan,SCC缩点,DAG性质)

    P2746 [USACO5.3]校园网Network of Schools https://www.luogu.org/problem/P2746 题目描述 一些学校连入一个电脑网络.那些学校已订立了 ...

  5. 洛谷 P2746 [USACO5.3]校园网Network of Schools 解题报告

    P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作"接受学校&q ...

  6. P2746 [USACO5.3]校园网Network of Schools(Tarjan)

    P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 ...

  7. P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools

    P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学 ...

  8. 洛谷P2746 [USACO5.3]校园网Network of Schools

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...

  9. P2746 [USACO5.3]校园网Network of Schools

    传送门 把所有学校的关系构成一个图,显然一个强联通分量的所有学校只要有一个有新软件,其他学校也都会有 考虑缩点,发现入度为 0 的块一定要给,因为没有其他人给它 入度不为 0 的块一定有其他人给,我们 ...

随机推荐

  1. Linux RHCE7.0 笔记(常见符号)

    1.无交互式创建用户 echo "password" | passwd --stdin username 2.Linux重定向符号 > :表示将符号左侧的内容,以覆盖的方式输 ...

  2. Tars | 第0篇 腾讯犀牛鸟开源人才培养计划Tars实战笔记目录

    腾讯犀牛鸟开源人才培养计划Tars实战笔记目录 前言 在2021年夏,笔者参加了腾讯首届开源人才培养计划的Tars项目,负责Subset流量管理规则的Java语言JDK实现.其中写作几篇开源实战笔记, ...

  3. CentOS linux系统将UTC时间修改为CST时间

    1.编辑时间配置文件 1 2 3 4 # vi /etc/sysconfig/clock           ZONE="Asia/Shanghai"     UTC=false  ...

  4. python中reduce filter map lambda函数

    lambda函数 python 使用 lambda 来创建匿名函数,lambda返回值是一个函数的地址,也就是函数对象. 语法:lambda [arg1 [,arg2,.....argn]]:expr ...

  5. POJ1804——Brainman(水题)

    解题思路: 一个乱序序列的 逆序数 = 在只允许相邻两个元素交换的条件下,得到有序序列的交换次数 直接求逆序数 把S[i]和s[i+1~n]的元素逐个比较,如果s[i] > s[k] (k∈[i ...

  6. PTA——c++类与对象

    对于给定的一个字符串,统计其中数字字符出现的次数. 类和函数接口定义: 设计一个类Solution,其中包含一个成员函数count_digits,其功能是统计传入的string类型参数中数字字符的个数 ...

  7. 【简单数据结构】并查集--洛谷 P1111

    题目背景 AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数NN,和公路数MM,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你 ...

  8. mysql语句alter添加 字段

    alter table ylh_coupon add is_reg int default 0 给数据表 ylh_coupon 添加一个字段 is_reg,,整型,默认值为0

  9. 小白一看就懂的postman教程

    Postman的安装和注册 下载 直接在官网下载 https://www.postman.com/downloads/ postman有两种形式 客户端,下载后安装使用 网页版,在浏览器登录postm ...

  10. 不关闭selinux下配置php+httpd访问KingbaseES

    在不关闭selinux的情况下使httpd+php+KingbaseES正常使用1.正常设置php.apache 除了正常流程外还需要在/etc/sysconfig/httpd最后追加LD_LIBRA ...