随笔分类 - 并查集
摘要:problem给一张n个点m条边的有向图,每条边有一个正整数权值以及一种色光三原色红、绿、蓝之一的颜色。恰好选出k条边,满足只用这k条边之中的红色边和绿色边(或者蓝色边和绿色边)就能使n个点之间两两连通对于k==1…m,计算选出恰好k条满足条件的边的权值之和的最小值。...
阅读全文
摘要:problem给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。输出字典序最小的方案(n的规模局势所有字母随机组合的大小)solution——背景 欧拉路:能够从无向图...
阅读全文
摘要:problemsolutioncodes#includeusing namespace std;int fa[200010];int find(int x){return x==fa[x] ? x : fa[x]=find(fa[x]);}int main(){ ...
阅读全文
摘要:problem给定n个人朋友的朋友是朋友,敌人的敌人是朋友朋友之间组成一个团伙,求团伙数solution将每个点x拆成两个:x和x+n(分别表示x的朋友和敌人)如果x和y是朋友,就将x和y合并如果x和y是敌人,就将x和y+n合并,将y和x+n合并注意朋友的敌人不一定是...
阅读全文
摘要:problemsolutioncodes//并查集模板#includeusing namespace std;int fa[5010];void init(int n){for(int i = 1; i >n>>m>>p; init(n); for(int...
阅读全文
摘要:problemsolutioncodes//并查集及补集//凡是与i+n节点在同一个集合里的,都是不能与i在同一个集合里的。#include#includeusing namespace std;struct Edge{ int u, v, w; }e[100010]...
阅读全文
摘要:problem有30000条队列,初始每条队列一条战舰,编号为1-30000。给出T条指令,分为合并和询问, 1、合并指令为: M i j 含义为第i号战舰所在的整个战舰队列,作为一个整体(头在前尾在后)接至第j号战舰所在的战舰队列的尾部。 2、询问指令为: C i ...
阅读全文
摘要:并查集模板,就酱紫。#includeusing namespace std;#define mod 998244353long long ans;int fa[4000010];int find(int x){ return fa[x]==x?x:fa[x]=find...
阅读全文
摘要:problem森林中有3种动物:A吃B,B吃C,C吃A现有 N 个动物(编号1~n),K句话。 1、1 X Y,表示 X 和 Y 是同类。 2、2 X Y,表示 X 吃 Y。一句话是假话当且仅当: 1、与前面的冲突。 2、X吃X。 3、编号大于N。判断当前话的真假。s...
阅读全文