[XSY]Tree Ext(矩阵树定理,拉格朗日插值,最小生成树,二分)

这篇博客结合了多项式系数计算、最小生成树计数问题和二分查找技术,通过实例介绍了如何在修复特定数量白色边的条件下应用这些算法。涉及的题目包括五颜六色的幻想乡(使用拉格朗日插值法)和bzoj2654 Tree (WQS二分法)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tree Ext
这道题相当于把3道题合了起来。

要求修复的边中恰好有 k 条白边:
五颜六色的幻想乡(附拉格朗日插值法求多项式系数 )
+
bzoj2654 tree(WQS二分 新科技get)

是最小生成树计数而非生成树计数:
BZOJ1016」[JSOI2008] 最小生成树计数

具体可以看看这篇博客,代码中的注释也解释得较清楚

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
const int N=105;
const int M=10005;
int n,m,k,l,r;
int tot,fa[N],pa[N],id[N],num[N];
int x[N],y[N],res[N],coef[N],ans[N];
struct edge{
   
    int u,v,w,c;
}e[M];
bool cmp(edge a,edge b){
   
	if(a.w==b.w) return a.c<b.c;
	return a.w<b.w;
}
int find(int u){
   
	if(fa[u]==u) return u;
	return fa[u]=find(fa[u]);
}
int get(int u){
   
	if(pa[u]==u) return u;
	return pa[u]=get(pa[u]);
}
int power(int a,int b){
   
	a%=mod;
	int res=1;
	while(b){
   
		if(b&1) res=res*a%mod;
		b>>=1;a=a*a%mod;
	}
	return res;
}
bool check(int mid){
   
    for(int i=1;i<=m;i++)
        if(!e[i].c) e[i].w+=mid;
    sort(e+1,e+m+1,cmp);
    for(int i=1;i<=n;i++) fa[i]=i;
    int cnt=0;
    for(int i=1,j=0;j<n-1;i++){
   
        int u=find(e[i].u),v=find(e[i].v);
        if(u!=v){
   
            fa[v]=u;j++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值