P1262 间谍网络

1、思路

阅读题目,发现有些间谍可以是被前面的点更新,也就是说,在一开始的时候,把能贿赂的人员从小到达排个序,再使用bfs算法,把他们能到达的人员的贿赂价钱设置为0。

有解的情况:

首先如果有环,我把环内的最少价钱的那一位买下,则整个环的间谍都被我买下。

首先把所有能被贿赂的根据bfs,依次把所有能到达的变为0

缩点之后,所有的都变为除了最小的那个,其他的都变为0,因此整个间谍网络只需要10就能买下。

但是对于如下情况

从小到大开始,依次是5,10,20,30。5能到达的点只有本身,不够,还要买下前面的环,而这个环10就能买下,因此如果有从X单向到Y,且X和Y都能买下,我们只需要买X。同理,尽管20比10更大,但是它还是需要买。否则无法买下所有的网络。因此,我们只需要买下缩点后入度为0的点就行。如果,如果入度为0的点不能被买下,那它就是无解。

有一个无法被遍历到,因此无解

无解的情况。

按能被贿赂的人员从小到大排序,依次处理每个能被贿赂的人员,如果能够被贿赂或者能够被更小的贿赂价钱到达,则打上一个标记,从小到大枚举所有人员,出现第一个标记则无解,输出该人员。

2、代码

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 6100, M = 11100;
struct PT //从小到大存储叛徒的价钱 
{int id,val;bool operator < (const PT &t)const {return val < t.val;}
}pt[N];int h[N],e[M],ne[M],idx;
int stk[N],top,timestamp;
bool st[N];
int dfn[N],low[N],id[N],Size[N],cnt;
int n,p,r;
int Value[N];
bool st1[N];
int din[N];
void add(int a,int b)
{e[idx] = b;ne[idx] = h[a];h[a] = idx++;
}
void bfs(int x)// 将能到达的都置为0 
{if(st1[x]) return;st1[x] =true;int Q[N],tt = 1,hh = 0;Q[0] = x;while(hh!=tt){int t = Q[hh++];for(int i = h[t];~i;i = ne[i]){int j = e[i];if(!st1[j]){st1[j] = true; Q[tt++] = j;Value[j] = 0;}}}
}
void tarjan(int u) // 标准的tarjan算法 
{low[u] = dfn[u] = ++timestamp;stk[++top] = u;st[u] = true;for(int i = h[u];~i;i = ne[i]){int j = e[i];if(!dfn[j]) {tarjan(j);low[u] = min(low[u],low[j]);}else if(st[j]) low[u] = min(low[u],dfn[j]);}if(low[u] == dfn[u]){++cnt;int y;do{y =  stk[top--];st[y] = false;id[y] = cnt;Size[cnt] += Value[y];}while(y!=u);}
}
int main()
{scanf("%d",&n);scanf("%d",&p);memset(h,-1,sizeof h);memset(Value,0x3f,sizeof Value);for(int i = 1;i<=p;i++){scanf("%d%d",&pt[i].id,&pt[i].val);Value[pt[i].id] = pt[i].val;	}sort(pt+1,pt+p+1);scanf("%d",&r);for(int i = 1;i<=r;i++){int a,b;scanf("%d%d",&a,&b);add(a,b);}for(int i = 1;i<=p;i++)bfs(pt[i].id);for(int i = 1;i<=n;i++){if(!st1[i]){cout<<"NO"<<endl;cout<<i<<endl;return 0;}}for(int i = 1;i<=n;i++)if(!dfn[i])tarjan(i);for(int i = 1;i<=n;i++){for(int j = h[i];~j;j = ne[j]){int k = e[j];int a = id[i],b = id[k];if(a!=b)din[b]++;}}int sum = 0;for(int i = cnt;i;i--){if(!din[i])sum += Size[i];}cout<<"YES"<<endl;cout<<sum<<endl;return 0;
} 

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

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

相关文章

【leetcode】力扣热门之反转链表【简单难度】

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 用例 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 输入&#xff1a;head [] 输出&#xff1a;[…

强化学习的数学原理学习笔记 - 时序差分学习(Temporal Difference)

文章目录 概览&#xff1a;RL方法分类时序差分学习&#xff08;Temporal Difference&#xff0c;TD&#xff09;TD for state valuesBasic TD&#x1f7e1;TD vs. MC &#x1f7e6;Sarsa (TD for action values)Basic Sarsa变体1&#xff1a;Expected Sarsa变体2&#xff1a;n-…

教程:Centos6迁移旧虚拟机文件后的网络配置教程,完美解决虚拟机移动后的网络ip变化问题

博主在工作后,想整整之前大学的虚拟机集群,因此特意从之前的旧电脑把虚拟机文件给拷贝了过来,在导入到vm-workstation,顺便能启动虚拟机后,发现之前的静态ip已经跟现在的宿主机网络不一样。想着重新配置,但觉得太麻烦,故想到了修改网卡的mac地址+网卡重配置方法,完美解…

【已解决】如何用c语言位运算输出浮点数数据

本博文源于笔者正在学习的c语言如何利用位运算输出浮点数数据类型&#xff0c;浮点数在其底部也是用二进制来处理&#xff0c;又考虑到他是低位在前高位在后的原理&#xff0c;因此进行了这样的代码编写 问题浮现 想要用c语言的位运算输出浮点数 问题源码 #include<stdi…

etcd储存安装

目录 etcd介绍: etcd工作原理 选举 复制日志 安全性 etcd工作场景 服务发现 etcd基本术语 etcd安装(centos) 设置&#xff1a;etcd后台运行 etcd 是云原生架构中重要的基础组件&#xff0c;由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册…

[大厂实践] 重新发明后端子集

子集算法有助于优化服务间连接利用率&#xff0c;降低资源使用。但随机或轮询子集算法在动态拓扑环境中会造成较高的连接扰动。本文介绍了谷歌在解决连接扰动方面所做的思考和实践&#xff0c;并介绍了当前最新的Rocksteadier子集算法。原文: Reinventing Backend Subsetting a…

面试题:怎么给详情页做性能优化的?

文章目录 一、背景二、接口优化方案总结1.批处理2.异步处理3.空间换时间4.预处理5.池化思想6.串行改并行7.索引8.避免大事务9.优化程序结构10.深分页问题11.SQL优化12.锁粒度避免过粗 三、最后 一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xff0c;其中发现…

03MyBatis完成CRUD

准备工作 ○ 创建module&#xff08;Maven的普通Java模块&#xff09;&#xff1a;mybatis-002-crud ○ pom.xml ■ 打包方式jar ■ 依赖&#xff1a; ● mybatis依赖 ● mysql驱动依赖 ● junit依赖 ● logback依赖 ○ mybatis-config.xml放在类的根路径下 ○ CarMapper.xml放…

Elasticsearch:Serarch tutorial - 使用 Python 进行搜索 (二)

这个是继上一篇文章 “Elasticsearch&#xff1a;Serarch tutorial - 使用 Python 进行搜索 &#xff08;一&#xff09;” 的续篇。在今天的文章中&#xff0c;我们接着来完成如何进行分页及过滤。 分页 - pagination 应用程序处理大量结果通常是不切实际的。 因此&#xff0…

【ros笔记】urdf文件

urdf文件属于xml文件&#xff0c;他的标签有&#xff1a; <robot name"robot_name"><!-- 看的见摸的着刚体用link --><link name"base_link"><!-- 可视化部分 --><visual><!-- 几何形状 --><geometry><!-- b…

vue-springboot 音乐推荐系统 带歌词的音乐播放器系统设计与实现 7902c

少数民族音乐网站在流畅性&#xff0c;续航能力&#xff0c;等方方面面都有着很大的优势。这就意味着少数民族音乐网站的设计可以比其他系统更为出色的能力&#xff0c;可以更高效的完成最新的音乐信息、音乐资讯、在线交流等功能。 此系统设计主要采用的是JAVA语言来进行开发&…

基于SpringBoot的教学辅助系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

实战Flink Java api消费kafka实时数据落盘HDFS

文章目录 1 需求分析2 实验过程2.1 启动服务程序2.2 启动kafka生产 3 Java API 开发3.1 依赖3.2 代码部分 4 实验验证STEP1STEP2STEP3 5 时间窗口 1 需求分析 在Java api中&#xff0c;使用flink本地模式&#xff0c;消费kafka主题&#xff0c;并直接将数据存入hdfs中。 flin…

java火车查询管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web火车查询管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

深度学习工具-Jupyter Notebook使用

在本地编辑和运行代码 运行命令jupyter notebook。如果浏览器未自动打开&#xff0c;请打开http://localhost:8888 你可以通过单击网页上显示的文件夹来访问notebook文件。它们通常有后缀“.ipynb”。为了简洁起见&#xff0c;我们创建了一个临时的“test.ipynb”文件。单击后…

计算机网络(超级详细笔记)

使用教材计算机网络&#xff08;第8版&#xff09;&#xff08;谢希仁&#xff09; 第一章&#xff1a;概述 第二章&#xff1a;物理层 第三章&#xff1a;数据链路层 第四章&#xff1a;网络层 第五章&#xff1a;运输层 第六章&#xff1a;应用层 目…

Linux学习第50天:Linux块设备驱动实验(二):Linux三大驱动之一

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 三、使用请求队列实验 1.实验程序编写 使用开发板上的一段RAM来模拟一段块设备&#xff0c;也就是ramdisk. 机械硬盘 34 #define RAMDISK_SIZE (2 * 1024 * 10…

使用即时设计绘制原型设计方便吗?和Axure RP相比怎么样?

对于原型设计&#xff0c;APP 和 Web 都是一样的&#xff0c;因为产品原型是用来确定需求的工具。我们使用这种工具的目的是为了快速迭代&#xff0c;从而深入挖掘和筛选产品的需求。 绘制原型&#xff0c;最重要的原则是&#xff1a;快速、清晰&#xff01; Axure 工具的优缺…

2023APMCM亚太数学建模C题 - 中国新能源汽车的发展趋势(3)

六、问题三的模型建立和求解 6.1问题分析 问题3.收集数据&#xff0c;建立数学模型分析新能源电动汽车对全球传统能源汽车行业的影响。 本题要求建立模型分析新能源电动汽车对全球传统能源汽车行业的影响。由于数据集可能略大&#xff0c;而在处理复杂问题、大量特征和大规模…

spatialRF

官网&#xff1a;Easy Spatial Modeling with Random Forest • spatialRF (blasbenito.github.io) spatialRF是一种在考虑空间自相关的前提下&#xff0c;利用随机森林对空间数据进行回归并解释的R包。 数据要求 参数命名 data&#xff1a;训练集&#xff0c;data frame。 …