Assignment 1 :Percolation

最初版本的实现十分容易,采用课程的提示,在UF中添加 virtual top site 和 virtual bottom site,并采用的是用一个boolean数组op跟踪一个site是否打开,如果未打开,则调用open函数。

但是这样会出现 backwash 问题,即 percolates 后一个site实际并没有连接top却也显示full(原因是这个site通过virtual bottom site 连接 virtual top site),要解决这个问题,思路是full函数中怎样让一个site不去连接 virtual bottom site,最先想到的用 double UF,其中一个UF没有 virtual bottom site,检查full是调用这个UF。这样能通过所有test,但无法拿到 bonus 。

想到用一个n*n的数组status追踪每个site的情况,情况分为(OPEN 0x01, TOP 0x02, BOTTOM 0x04, 这样设定是为了方便位运算)。这样一来,isOpen只要检查第一位是否为1,isFull只要检查root第二位是否为1,percolates只要检查virtual top site的root第二位和第三位是否均为1,。这个方法的难点在open,open一个site时,应该如何设定它的初值?open之后要union它四周已经open的site,这是该如何设定union之后root的状态?

时间: 2024-12-15 06:58:02

Assignment 1 :Percolation的相关文章

Assignment 1-3 :Pattern Recognition

题目描述 大概意思就是让你找出包含四个点以上的直线. Point API 的实现略(因为不熟悉 Java 的 Comparator,是对着课件的模板写的...) Brute force 要求:The order of growth of the running time of your program should be N4 in the worst case and it should use space proportional to N plus the number of line s

遇到local variable 'e' referenced before assignment这样的问题应该如何解决

问题:程序报错:local variable 'e' referenced before assignment 解决:遇到这样的问题,说明你在声明变量e之前就已经对其进行了调用,定位到错误的地方,对变量进行重新的声明 通常这样的问题对于python的程序员来说都是因为习惯了python2的语法,转移到python3中时,出现的错误.在Python3中,异常对象无法在异常块作用域外访问.(原因是在垃圾收集器运行且从内存中清理引用之前会在内存栈帧中保存一个引用周期)通常参考下面这个例子来做异常处理:

5289 Assignment (RMQ+二分区间)

题目链接:5289 Assignment 题意:给出n和K,表示有一串n个数的序列,存在多少个区间,该区间中任意两个数的差小于k 思路: 1.区间任意两个数的小于K 等价于 区间max-min<k,用RMQ来维护,区间最大最小值 2.最后暴力枚举区间必定要超时,发现随着区间的扩大max-min的值也在变大(非递减),有单调性就容易想到二分,所以是枚举左端点,二分找右端点. AC代码: #include<stdio.h> #include <algorithm> using n

hdu6006 Engineer Assignment 状态dp 定义dp[i][s]表示前i个工程状态为s可以执行的最大工程数。s表示前i个工人选走了s状态的工程师。

/** 题目:hdu6006 Engineer Assignment 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6006 题意:已知n个工程,每个需要某些领域的专家.有m个工程师,每个人擅长一些领域. 一个工程师只能参加一个工程.一个工程可以多个工程师参加. 如果参加某个工程的工程师他们擅长的领域覆盖了该工程需要的领域.那么该工程可以执行. 问最多可以执行多少个工程. 思路: 定义dp[i][s]表示前i个工程状态为s可以执行的最大工程数.s表示前

Python基础【day02】:字符串

在Python中字符串本身有带很多操作,字符串的特性,不可以被修改 1.字符串的定义 1 2 3 4 5 6 7 8 9 10 11 12 #定义空字符串 name = '' #定义非空字符串 >>> name = "zhangqigao" #通过下标访问 >>> name[1] 'h' #不能修改字符串的值,否则会报错 >>> name[2] = '3' Traceback (most recent call last):   F

c++笔记:const、初始化、copy构造/析构/赋值函数

构造函数 Default构造函数:可被调用而不带任何实参的构造函数,没有参数或每个参数都有缺省值.如: class A { public: A(); }; 将构造函数声明为explicit,可阻止它们被用来执行隐式类型转换,但仍可用来进行显示类型转换.如: class B { public: explicit B(int x = 0, bool b = ture); }; copy构造函数:用于以同型对象初始化自我对象,以passed by value的方式传递对象:· copy assignm

storm源码分析之任务分配--task assignment

在"storm源码分析之topology提交过程"一文最后,submitTopologyWithOpts函数调用了mk-assignments函数.该函数的主要功能就是进行topology的任务分配(task assignment).mk-assignments函数定义如下: ;; get existing assignment (just the executor->node+port map) -> default to {};; filter out ones whi

HDU - 5289 Assignment (RMQ+二分)

题目链接: Assignment  题意: 给出一个数列,问其中存在多少连续子序列,使得子序列的最大值-最小值<k. 题解: RMQ先处理出每个区间的最大值和最小值(复杂度为:n×logn),相当于求出了每个区间的最大值-最小值.那么现在我们枚举左端点,二分右端点就可以在n×logn×logn的时间内过. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAX_N = 1e5+9; 4 int vec[MAX_N]

Python:What the f*ck Python(下)

GitHub 上有一个名为<What the f*ck Python!>的项目,这个有趣的项目意在收集 Python 中那些难以理解和反人类直觉的例子以及鲜为人知的功能特性,并尝试讨论这些现象背后真正的原理! 原版地址:https://github.com/satwikkansal/wtfpython 最近,一位名为"暮晨"的贡献者将其翻译成了中文. 中文版地址:https://github.com/leisurelicht/wtfpython-cn 上一篇 Python: