首页 > TAG信息列表 > NOI2002

[NOI2002] 银河英雄传说

原题链接 题解 考点:带权并查集。 设 \(d[x]\) 表示 \(x\) 节点前面的战舰数量,\(s[x]\) 表示以 \(x\) 节点为首的那一列战舰的总数,合并操作如下: void add(int x,int y) { int a=find(x),b=find(y); fa[a]=b; d[a]=s[b]; s[b]+=s[a]; s[a]=0; } 把 \(a\) 接到 \(b\),\(a\) 前面

【Coel.解题报告】【推柿子的基本思路】[NOI2002] 荒岛野人

题前碎语 还有13天就要期考了,可我还是在机房颓题目。 其实我本来不是很想颓的,可是这道题对于学习扩欧来说很重要,所以还是放进来一下。 题目简介 洛谷传送门 题目描述 克里特岛以野人群居而著称。岛上有排列成环行的 \(m\) 个山洞。这些山洞顺时针编号为 \(1,2,\dots ,m\) 。岛上住

P4362 [NOI2002] 贪吃的九头龙 题解

Description Luogu传送门 Solution 非常巧妙地树形 \(dp\),刚开始完全不知道如何设状态 QwQ。 言归正传,我们对于每个点可以随便分配个某一个头,只有大头需要必须有 \(k\) 个果子,所以我们的状态里只需要大头就够了。 那么设 \(dp_{x, i}\) 表示以 \(x\) 为根的子树中给大头 \(i\)

P5746 [NOI2002] 机器人M号

题目 P5746 [NOI2002] 机器人M号 分析 这道题足以显示我 \(dp\) 水平真是菜到家了。。才做了不久又不会了。。 首先题目里面说: 对于编号为 \(m\) 的机器人,如果能把 \(m\) 分解成偶数个不同奇素数的积,则它是政客,例如编号 \(15\); 否则,如果 \(m\) 本身就是奇素数或者能把 \(m\) 分

洛谷P2421 [NOI2002]荒岛野人(扩展欧几里得)

题目背景 原 A-B数对(增强版)参见P1102 题目描述 克里特岛以野人群居而著称。岛上有排列成环行的M个山洞。这些山洞顺时针编号为1,2,…,M。岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi个洞住下来。 每个野人i有一个寿命值Li,即生存的年数。

洛谷P1196 [NOI2002] 银河英雄传说

题链 边带权并查集,val[i]记录编号为i的舰船距离根舰船的距离,合并时如x接到y所在舰队的末尾,fx,fy为x,y的根节点,并不是val[fx] += val[y],这里的若不是真正舰队末尾则出错,需要sum[i]数组记录某一列舰队的数目,val[fx] += sum[fy]; 具体如代码着重部分 #include <bits/stdc++.h> #include

Luogu P4362 [NOI2002] 贪吃的九头龙

读题找到无解的情况:大头吃掉的\(K\)个果子后,剩下的\(N - K\)个果子不够其他的\(M-1\)个头分,即\(N-K<M-1\) 题目中只限制除了大头外的头要吃至少一个果子,也就是说一段树枝相连的两个果子若被同一个头吃掉,则只会被大头吃掉,否则不是最优(\(M=2\)的情况除外)。 证明( 口胡): 如果出现树枝相

[NOI2002]银河英雄传说

题目背景 公元 580158015801 年,地球居民迁至金牛座 α\alphaα 第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展。 宇宙历 799799799 年,银河系的两大军事集团在巴米利恩星域爆发战争。泰山压顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气

[NOI2002]银河英雄传说

带权并查集 有蜘蛛纸牌内味。 code: #include<bits/stdc++.h> using namespace std; int T,a,bb,fa[30001],b[30001],s[30001]; char ch; int fd(int x){ if(x==fa[x]) return x; int tp=fa[x]; fa[x]=fd(fa[x]); s[x]+=s[tp]; return fa[x]; } int main(){ cin>>T; f

Luogu2421 [NOI2002]荒岛野人(拓欧)题解

算法 暴力枚举+拓欧检查 思路 两个野人\(i\)与\(j\)会相遇,当且仅当方程\(c_i + xp_i \equiv c_j + xp_j(mod M)\)有正整数解且该解\(\leq min(l_i,l_j)\)。 又发现题目中保证 \(M \leq 1e6\),于是就可以愉快的暴力枚举了。 而上面的方程可以化为\(x(p_i - p_j) \equiv c_j - c_i(mo

【题解】[NOI2002]荒岛野人

首先根据题意,我们可以发现,两个野人 \(i, j\) 会处在一个山洞当且仅当存在 \(x\) 满足 \(C_i+xP_i\equiv C_j+xP_j \ (\bmod M)\) (\(M\) 为山顶数,\(x\) 为年数)当然,野人在 \(L_i\) 年后会死亡,故当最小正整数解 \(x > L_i\) 且 \(x > L_j\) 时,其实是不满足两个野人处在一个山洞的。那

解题报告:luogu P1196 [NOI2002]银河英雄传说

由于并查集让我很自闭(其实是我太弱了),所以学习了加权并查集,这是例题: 题目链接:P1196 [NOI2002]银河英雄传说 不是很简单,但对于大佬还是签到题。 合并与路径压缩时直接维护\(dis[],num[]\),就好了,不过为什么要引进\(num[]\)呢? 真无奈。 不过++此题就很简单了,注意\(getf()\)有两句不要

Luogu P1196 [NOI2002]银河英雄传说

带权并查集 对于每一列记录id[i]表示第i号战舰的序号,sum[i]表示第i号战舰所在列的战舰个数 对于每一个合并操作,无法对每一个所在当前列的战舰信息进行更新 所以只对队头战舰的信息进行修改,用类似线段树中懒标记的方法 当要对这一艘战舰进行访问时,对其信息进行修改 注意,在并查集中先

P1196 [NOI2002]银河英雄传说

  喵喵喵这道题这题跟搭积木很像,然而我居然迷失在了这令人心醉神迷的题面之中。。(逃 好的呢这题就是一个比较绕的并查集,每次将一个的头接在要移到的地方的尾上,并每次访问的时候用将两个的后缀数相减即可得出答案 #include<set>#include<map>#include<list>#include<queue>#includ

洛谷 题解 P1196 【[NOI2002]银河英雄传说】

并查集大难题。 看了题解之后才有思路,调了很久很久才AC,当然要写一篇题解来纪念一下。 先来分析一下这些指令的特点,很容易发现对于每个M指令,只可能一次移动整个队列,并且是把两个队列首尾相接合并成一个队列,不会出现把一个队列分开的情况,因此,我们必须要找到一个可以一次操作合并两个