摘要:
题目大意:给定一棵树,要求增加若干条边,将其转化为完全图,且该完全图以该树为唯一的最小生成树,求增加的边权最小是多少。 题解:完全图的问题一般要考虑组合计数。重新跑一遍克鲁斯卡尔算法,每次并查集在合并时进行计数,因为要求最小生成树唯一,必须保证每条边都比当前连接两个联通块的边要至少大 1,因此每次合 阅读全文
摘要:
代码如下 cpp include using namespace std; const int maxv=2e5+10; const int maxe=5e5+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch==' ' 阅读全文
摘要:
代码如下 cpp include using namespace std; const int maxv=2e5+10; const int maxe=5e5+10; typedef pair P; inline int read(){ int x=0,f=1;char ch; do{ch=getc 阅读全文
摘要:
题目大意:给定一棵 N 个节点的边权无根树,求树的直径。 代码如下 cpp include include using namespace std; const int maxn=1e4+10; struct node{ int nxt,to,w; }e[maxnd1[u])d2[u]=d1[u], 阅读全文
摘要:
题目大意:维护 N 个人和 M 个关系,对每个人来说符合:我朋友的朋友也是我的朋友,我敌人的敌人也是我的朋友,求最多有多少个朋友构成的联通块。 题目大意:维护关系显然要用到并查集,这里是维护了两种关系,即:朋友和敌人,应该有两种做法,首先是维护带权并查集,可用 0 表示两人为朋友,1 表示两人为敌人 阅读全文