【数据结构】量子危机

问题

宇宙时间公元 5.55 亿年,由于某种原因两大联盟展开了激战(maxingc 联盟采用了微子技术):
邪恶的 maxingc 联盟采集好了微子能,就要运输。Maxingc 联盟的领袖 xc 此时才发现,自己的军事基地中
由微子发射器组成的微子能量网存在很大的问题,于是他决定修改。
之前,TT 为了整齐,把军事基地建成了矩形,而且如果两个微子发射器的连线平行于军事基地的一边,这
两个微子发射器之间就一定有微子能量传输线相连。
(*注:比如有 3 个微子发射器A(1,1)、B(1,3)、C(2,2),那么 A 和 B 之间有微子能量传输线相连,
A 和 B 不能传输到 C。*)
但是在微子能运输过程中发现,常常不能从一个微子发射器运抵另一个微子发射器。
为了可以从任何一个微子传输器能运抵其它任意一个微子传输器,而且能和原来的微子能量网同样整齐,
TT 决定遵循原来的规则,调动他的百万农奴新修建一些微子能量传输线和微子发射器。由于微子发射器的
造价比微子传输线高得多,所以 TT 决定忽略微子能量传输线的成本。
但是 TT 又不想花费不必要的钱,所以找到你为他计算最少需要建多少个微子发射器。
输入格式  Input Format
第一行三个正整数 n、m、p。(2<=n,m<=100000,表示军事基地的两边长;2<=p<=200000,表示微子

发射器的个数。)
接下来 p行,每行两个正整数数 Xi、 Yi(1<=Xi<=n   1<=Yi<=m),代表每个微子发射器在军事基地的位置。
(可能会由于疏漏,有些微子发射器重复)
输出格式  Output Format
样例:
 输入:5 6 6
1 1
2 2
2 4
3 3
5 1
5 5
输出:
2
只有一行,为最少修建微子发射器的数量。
样例的一种方案:
#.....
|#-#..
|.#+..
|.|...
#-+-#.
#表示原有微子发射器,-、|表示微子能量传输线,+表示兴建的微子发射器。所以至少兴建 2 个微子发射
器。

分析

我们先这样考虑,如果对所有已知的节点进行染色的话,能染成同一种颜色的节点一定在同一个强连通分量中(内部连同),那么需要兴建的节点数就等于强连通分量数减一

我们来证明这个结论:对于任意一个节点它可以照顾到一行一列上的所有节点。也就是说,一个节点最多可以连接到4个强连通分量。如果一个兴建的节点只连接一个强连通分量,那么这个节点是毫无用处的。如果一个节点连接3个强连同分量,那么这3个强连通分量必有两个已经在一个强连通分量中。连接4个同理。只有当一个节点连接两个强连通分量时,才能让这两个原先不连通的分量相互连同。

这就类似于最小生成树,将兴建的节点看成边,原有的强连通分量看做节点,那么n个节点连成一颗生成树必然需要n-1个节点。

下面的问题就是如何染色。

如果用floodfill会很复杂,而且显然会超时。我们要考虑更加优秀的的算法。我们现在需要将在一个强连通分量中的原节点赋予同一个标识,并查集!

再加一个标记数组(n+m 表示某行或某列上是否有节点)。每读入一个节点我们就将其所在的行和列和并在一个集合中。这样就将一个强连同分量中的所有行和列合并在了同一个集合中。

最后,只需要枚举每行(列),如果该行(列)被标记过(在某个强连通分量中),那么找到它的根节点,累计总数并且标记当前强连通分量被访问过(应用并查集压缩路径后在同一个集合中的元素的祖先相同),只需标记其祖先即可。

ContractedBlock.gifExpandedBlockStart.gifView Code
program liukeke;
var
f:
array[1..400000] of longint;
v:
array[1..400000] of boolean;
i,n,m,p,x,y,temp1,temp2,ans:longint;

function find(x:longint):longint;
begin
if f[x]=x then exit(x);
f[x]:
=find(f[x]);
exit(f[x]);
end;

begin
assign(input,
'wei.in');reset(input);
assign(output,
'wei.out');rewrite(output);
readln(n,m,p);
for i:=1 to n+m do f[i]:=i;
for i:=1 to p do
begin
readln(x,y);
temp1:
=find(x);
temp2:
=find(y+n);
if temp1<>temp2 then
f[temp1]:
=temp2;
v[x]:
=true;
v[y
+n]:=true;
end;
for i:=1 to n+m do
if v[i] then
begin
temp1:
=find(i);
if v[temp1] then
begin
inc(ans);
v[temp1]:
=false;
end;
end;
writeln(ans
-1);
close(input);
close(output);
end.

反思

要先对题目分析,抽象其模型,再选取合适的数据结构解决问题,并查集应用不多但都很巧妙,可用来判断逻辑关系和集合关系

转载于:https://www.cnblogs.com/liukeke/archive/2011/06/12/2078972.html

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

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

相关文章

android 自定义menu背景,Android编程实现自定义系统菜单背景的方法

本文实例讲述了Android编程实现自定义系统菜单背景的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;不多说&#xff0c;上图&#xff0c;见代码。package lab.sodino.menutest;import android.content.Context;import android.app.Activity;import android.os.Bu…

面试官问 async、await 函数原理是在问什么?

大家好&#xff0c;我是若川。这是 源码共读活动《1个月&#xff0c;200人&#xff0c;一起读了4周源码》 第四期&#xff0c;纪年小姐姐的第四次投稿。纪年小姐姐通过本次学习提早接触到generator&#xff0c;协程概念&#xff0c;了解了async/await函数的原理等。第四期是 学…

一步步优化JVM六:优化吞吐量[转]

2019独角兽企业重金招聘Python工程师标准>>> 原文&#xff1a;http://ganlv.iteye.com/blog/1571315 参考&#xff1a;http://www.myexception.cn/software-architecture-design/1455594.html 现代JVM是一个具有灵活适应各种应用能力的软件&#xff0c;尽管很多应用…

element-ui 网格_UI备忘单:列表与网格

element-ui 网格重点 (Top highlight)Grids or lists? That is the question we will look at in this cheat sheet. While they can be used anywhere in your site, we are going to look primarily at search results, catalogs and newsfeeds. Making this choice will de…

50行 koa-compose,面试常考的中间件原理原来这么简单?

大家好&#xff0c;我是若川。源码共读《1个月&#xff0c;200人&#xff0c;一起读了4周源码》 活动第五期是学习 koa 源码的整体架构&#xff0c;浅析koa洋葱模型原理和co原理中的koa-compose源码原理&#xff0c;阅读不到50行的koa-compose源码。这篇是izjing小哥哥的投稿。…

sqlite3源码编译到Android,实现SQLite跨全平台使用

文&#xff0f;何晓杰Dev(高级Android架构师)著作权归作者所有&#xff0c;转载请联系作者获得授权。初看这个标题你可能会不解&#xff0c;SQLite 本身就是一个跨平台的数据库&#xff0c;在这里再说跨平台有什么意义呢&#xff1f;其实不然&#xff0c;目前我就遇到了一个项目…

illustrator下载_平面设计:16个Illustrator快捷方式可加快工作流程

illustrator下载I know, I know — keyboard shortcuts sound so nerdy, and you’re a graphic designer, not an IT Director, why should you learn keyboard shortcuts?我知道&#xff0c;我知道—键盘快捷键听起来很书呆&#xff0c;而且您是图形设计师&#xff0c;而不是…

手把手教你五分钟扒个源码写个无敌外挂

大家好&#xff0c;我是若川。源码共读《1个月&#xff0c;200人&#xff0c;一起读了4周源码》 活动进行到第五期了&#xff0c;欢迎点链接加我微信 ruochuan12 报名参加。前言前段时间群里分享了一个小游戏&#xff0c;多次怀疑自己的眼睛以后&#xff0c;尝试去写个外挂。中…

Kubernetes 1.14重磅来袭,多项关键特性生产可用

走过了突飞猛进的2018年&#xff0c;Kubernetes在2019年终于迎来了第一个大动作&#xff1a;Kubernetes 1.14版本的正式发布&#xff01;Kubernetes 本次发布的 1.14 版本&#xff0c;包含了 31 项增强&#xff0c;其中 10 项为 GA&#xff0c;12 项进入 beta 试用阶段&#xf…

open ai gpt_让我们来谈谈将GPT-3 AI推文震撼到核心的那条推文

open ai gpt重点 (Top highlight)“设计师”插件 (The ‘Designer’ plugin) A couple days ago, a tweet shared by Jordan Singer turned the heads of thousands of designers. With the capabilities of GPT-3 (from OpenAI), he shared a sample of what he was able to c…

我历时3年才写了10余篇源码文章,但收获了100w+阅读

你好&#xff0c;我是若川。最近来了一些读者朋友&#xff0c;在这里简单介绍自己的经历&#xff0c;也许对你有些启发。之前发过这篇文章&#xff0c;现在修改下声明原创&#xff0c;方便保护版权。最近组织了源码共读活动1个月&#xff0c;200人&#xff0c;一起读了4周源码&…

第 8 章 容器网络 - 061 - flannel 的连通与隔离

flannel 的连通与隔离 测试 bbox1 和 bbxo2 的连通性&#xff1a; bbox1 能够 ping 到位于不同 subnet 的 bbox2&#xff0c;通过 traceroute 分析一下 bbox1 到 bbox2 的路径。 1&#xff09; bbox1 与 bbox2 不是一个 subnet&#xff0c;数据包发送给默认网关 10.2.9.1&#…

计算机视觉笔记本推荐_视觉灵感:Mishti笔记本

计算机视觉笔记本推荐The Mishti Notebook is a project close to my heart, wherein I experimented with screen printing techniques at the Print Labs at the National Institute of Design, Ahmedabad. Dating back to the year 2012 when the NID Print Labs was first …

Google工程师:如何看待程序员普遍缺乏数据结构和算法知识?

出处&#xff1a;极客时间《数据结构与算法之美》很多技术人都很迷茫&#xff0c;觉得自己做的项目没有技术含量&#xff0c;成天就是卖苦力。技术的东西&#xff0c;日新月异&#xff0c;有些人总在忙于追求热点新技术&#xff0c;东学学、西学学&#xff0c;平时泛泛地看技术…

android guide 中文版,Sky Guide

Sky Guide是一款能让小伙伴们观察银河的手机软件&#xff0c;尤其是喜欢行星、星座的小伙伴们来讲&#xff0c;这款软件能很好的帮助小伙伴们观看这些&#xff0c;让小伙伴们体验不一样的观星乐趣&#xff0c;因此想要观看的小伙伴们&#xff0c;赶紧来试试吧。软件介绍&#x…

layui选项卡嵌套选项卡_在ProtoPie中使用嵌套组件构建选项卡栏

layui选项卡嵌套选项卡One of the powerful features of ProtoPie is the ability to build fully portable and interactive UI components. We are going to make use of nested components, SVG icons, and layout constraints to build a tab bar UI component that is sel…

50行代码串行Promise,koa洋葱模型原来这么有趣?

1. 前言大家好&#xff0c;我是若川&#xff0c;最近组织了源码共读活动《1个月&#xff0c;200人&#xff0c;一起读了4周源码》&#xff0c;感兴趣的可以加我微信 ruochuan12 参与&#xff0c;长期交流学习。之前写的《学习源码整体架构系列》 包含jQuery、underscore、lodas…

js 用迭代器模式优雅的处理递归问题

2019独角兽企业重金招聘Python工程师标准>>> 什么是迭代器 循环数组或对象内每一项值&#xff0c;在 js 里原生已经提供了一个迭代器。 var arr [1, 2, 3] arr.forEach(function (item) {console.log(item) })实现一个迭代器 var iterator function (arr, cb) {fo…

如何抓取html请求,请求获取网页的response,获取网页的html 怎么那么慢

HttpEntity multipart builder.build();httppost.setEntity(multipart);long start System.currentTimeMillis();// 发送请求response httpclient.execute(httppost);long end System.currentTimeMillis();System.out.println("查询upsfreight消耗的时间是(毫秒):&quo…

Serverless 究竟是什么?

大家好&#xff0c;我是若川。说起 Serverless&#xff0c;我想你应该并不陌生&#xff0c;作为一种云开发的架构模式&#xff0c;在近两年里&#xff0c;伴随着云原生概念的推广愈发火爆。作为一名 Serverless 的拥趸&#xff0c;在跟大家推荐的过程中&#xff0c;我经常能看到…