Bzoj1051 受欢迎的牛

每一头牛的愿望就是变成一头最受欢迎的牛。现在有 N 头牛,给你 M 对整数 (A,B),表示牛 A 认为牛 B 受欢迎。这种关系是具有传递性的,如果 A 认为 B 受欢迎,B 认为 C 受欢迎,那么牛 A 也认为牛 C 受欢迎。你的任务是求出有多少头牛被除自己之外的所有牛认为是受欢迎的


第一眼是个很弱智的Tarjan缩点,然后判断有没有连通分量的入度为连通分量个数减一

但是我把传递性想的太简单了

如果有下图这样的,我就只会判定出3号点有一个入度,但是正确值为2

所以我们换一个角度,从缩点的性质来考虑

我们知道,缩点之后的图是一个DAG(有向无环图)

所以一个节点如果有出度,就不可能被它所到的点崇拜,否则就有环了

所以我们得出了第一条结论,只有出度为零的点才能被所有点崇拜

然后有的人会问如果有多个节点的出度为零怎么办呢

即使不从图的角度来看,这两个出度为零的点也是不可能互相崇拜的,所以不成立

下面给出代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cmath>
using namespace std;
inline int rd(){int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';return x*f;
}
inline void write(int x){if(x<0) putchar('-'),x=-x;if(x>9) write(x/10);putchar(x%10+'0');return ;
}
int n,m;
int head[1000006],nxt[1000006],to[1000006];
int total;
void add(int x,int y){total++;to[total]=y;nxt[total]=head[x];head[x]=total;return ;
}
int dfn[1000006];
int low[1000006];
int tot=0;
int book[1000006];
int sta[1000006];
int set=0;
int v[1000006];
int cnt=0;
int color[1000006];
void tarjan(int x){low[x]=dfn[x]=++tot;sta[++set]=x;book[x]=1;for(int e=head[x];e;e=nxt[e]){if(!dfn[to[e]]){tarjan(to[e]);low[x]=min(low[x],low[to[e]]);}else if(book[to[e]]) low[x]=min(low[x],dfn[to[e]]);}if(dfn[x]==low[x]){cnt++;book[x]=0;v[cnt]++;color[x]=cnt;while(set&&sta[set]!=x){book[sta[set]]=0;v[cnt]++;color[sta[set]]=cnt;set--;}set--;}return ;
}
int du[1000006];
int main(){n=rd(),m=rd();for(int i=1;i<=m;i++){int x=rd(),y=rd();add(x,y);}for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);int ans=0;for(int i=1;i<=n;i++){for(int e=head[i];e;e=nxt[e]){if(color[i]!=color[to[e]]){du[color[i]]++;}}}int num=0;for(int i=1;i<=cnt;i++){if(du[i]==0){num++;ans+=v[i];}}if(num==1) write(ans);else write(0);return 0;
}

 

转载于:https://www.cnblogs.com/WWHHTT/p/9862091.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript --- 文件上传即时预览 闭包实现多图片即时预览

使用javascript原生功能实现,点击上传文件,然后再网页上显示出来 1. 初级显示 1.1 准备一个input标签和一个img标签 <input typefile id"file"> <img id"preview" src"">1.2 js代码如下 // 将上传的图片显示到页面上function sho…

第一次作业:深入Linux源码分析进程模型

一.进程的概念 第一&#xff0c;进程是一个实体。每一个进程都有它自己的地址空间&#xff0c;一般情况下&#xff0c;包括文本区域&#xff08;text region&#xff09;、数据区域&#xff08;data region&#xff09;和堆栈&#xff08;stack region&#xff09;。文本区域存…

关于模型验证那点事儿

今天应笑笑老师之问&#xff0c;做了一个模型验证的例子&#xff0c;发现之前对这个东西的理解太片面&#xff0c;重新整理了一下思路 字段验证优先级高于类验证 什么是类验证呢&#xff1f;就是两个字段组合的验证&#xff0c;比如你Admin不允许修改密码&#xff0c;你修改密码…

Win10安装MySQL5.7.22 解压缩版(手动配置)方法

1.下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html#downloads 直接点击下载项 下载后&#xff1a; 2.可以把解压的内容随便放到一个目录&#xff0c;我的是如下目录&#xff08;放到C盘的话&#xff0c;可能在修改ini文件时涉及权限问题&#xff0c;之后我…

Elemant-UI日期范围的表单验证

Form 组件提供了表单验证的功能&#xff0c;只需要通过 rules 属性传入约定的验证规则&#xff0c;并将 Form-Item 的 prop 属性设置为需校验的字段名即可。但是官网的示例只有普通日期类型的验证&#xff0c;没有时间范围的验证。 一开始&#xff0c;我认为时间时间范围的是一…

node --- [express项目] 开发环境下使用morgan控制台输出访问信息

说明 源代码记录、遗忘回顾 process.env node中提供了一个process.env接口用于访问计算机中的系统环境变量. 可以利用以上属性来区分当前的环境是开发环境还是生产环境,代码如下: if (process.env.NODE_ENV development) {console.log(当前环境是开发环境) } else {consol…

Dynamics CRM 访问团队的使用

访问团队和负责人团队的区别是&#xff1a;负责人团队可以拥有记录&#xff0c;访问团队不能拥有记录也不能加入解决方案中。 访问团队用法1&#xff1a;可以将不同组织的人员加入到访问组实现数据的更新、删除、共享 访问团队用法2&#xff1a;访问团队模板的使用 步骤一&…

node --- [express] cookie/session 机制与 中间件的使用(路由守卫)

说明 源代码记忆、遗忘回顾使用 cookie/session 机制,让 客户端/服务器 的访问变得有状态 cookie 与 session 由于 HTTP 协议的无状态性,当一次连接断开后. 服务器并不会记录用户是否登录. 因此需要引入 cookie/session 机制 cookie cookie: 浏览器在电脑硬盘中开辟的一块空…

02 数据类型

转载于:https://www.cnblogs.com/theoup/p/9875293.html

(数据科学学习手札30)朴素贝叶斯分类器的原理详解Python与R实现

一、简介 要介绍朴素贝叶斯&#xff08;naive bayes&#xff09;分类器&#xff0c;就不得不先介绍贝叶斯决策论的相关理论&#xff1a; 贝叶斯决策论&#xff08;bayesian decision theory&#xff09;是概率框架下实施决策的基本方法。对分类任务来说&#xff0c;在所有相关概…

Shiro身份认证---转

目录1.Shro的概念2.Shiro的简单身份认证实现3.Shiro与spring对身份认证的实现前言&#xff1a; Shiro 可以非常容易的开发出足够好的应用&#xff0c;其不仅可以用在 JavaSE 环境&#xff0c;也可以用在 JavaEE 环境。Shiro 可以帮助我们完成&#xff1a;认证、授权、加密、会话…

css --- [练手小项目]样式小结(字体、颜色的语义 清除浮动的使用)

说明 源代码 1.1 CSS属性书写顺序(重点) 建议遵循以下顺序: 1.布局定位属性: display / position / float / clear / visibility / overflow (建议display第一个写, 毕竟关系到模式) 2.自身属性: width / height / margin / padding / border / background 3.文本属性: co…

链式前向星(转)

转自大佬博客https://blog.csdn.net/ACdreamers/article/details/16902023 我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位…

javascript --- [jsonp] script标签的妙用(绕过同源限制)

1. 同源 1.1 什么是同源 协议、域名、端口号相同 1.2 为什么有同源政策 同源政策是为了保护用户信息的安全,放置恶意的网站窃取数据。最初的同源政策是指A网站再客户端设置的Cookie,B网站是不能访问的. 随着互联网的发展,同源政策也越来越严格,在不同源的情况下,其中有一项…

不同权限访问详细细节

1 package com.package1;2 3 /**4 * 程序执行入口和调用方法在不同类但在同一个包中&#xff0c;除了private方法&#xff0c;其他任何权限的方法都可以都可相互调用5 * author Administrator6 *7 */8 public class Source {9 public static void main(String[] args) …

洛谷P2822组合数问题

传送门啦 15分暴力&#xff0c;但看题解说暴力分有30分。 就是找到公式&#xff0c;然后套公式。。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;long long read(){char ch;bool f false;wh…

基于Docker的GoldenGate部署

前言Docker最近几年异常火爆&#xff0c;主要是因为其方便、快捷、轻量&#xff0c;相对于VM&#xff0c;它不需要占用太多资源&#xff0c;随时可以创建、删除&#xff0c;或在已有image上添加一些软件&#xff0c;再制作成另一个模板image供日后使用。Docker提供的Hub或priva…

jquery --- 监听tab栏的变化

1. jQuery样式操作 1.1 操作css方法 参数只写属性名,则返回属性值(字符串) $(this).css(color)参数是 属性名、属性值(逗号分隔&#xff0c;则表示设置属性 $(this).css(color,red)参数可以是对象的形式 $(this).css({width: 400px,height: 400px })1.2 设置类样式方法 添…

算法 --- 递归实现多级树展开结构

说明 先根据数据渲染,然后再实现事件 渲染 在项目中,经常会给出一个深度不确定的数组,数字结构如下: data [{name: a, child:[{name: a1},{name: a2, child: [{name:a21}]}]},{name: b} ]要求将数组渲染成对应的目录结构, 结构如下: <ul><li>a<ul><…

ARP协议,以及ARP欺骗

1.定义&#xff1a; 地址解析协议&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机&#xff0c;并接收返回消息&#xff0c;以此…