算法竞赛——进阶指南——acwing 364. 网络 e-DCC + LCA + 并查集 O(M+logn*Q)做法

这篇博客介绍了如何利用并查集优化算法竞赛中网络e-DCC问题的解决方法,通过压缩路径避免非桥边导致的无效操作,从而将单次复杂度降低到logn。
摘要由CSDN通过智能技术生成

之前我们暴力枚举路径上的边每次要ON的复杂度太慢了。

考虑我们每次找路径是找自底向上找,,很多次会找到非桥边,造成不必要的浪费步数。

所以我们可以用并查集来压缩路径。

若点x与其父亲的路径从桥边变成非桥边,则把x指向y的祖宗。

这样就能跳过非桥边进行无意义的访问了。

单次复杂度将为logn

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M = 4e5+7;

int head[M],cnt=1,head_c[M],cnt_c=1;
struct EDGE{int to,nxt,w;}ee[M*2],ee_c[M*2];
void add(int x,int y,int w){ee[++cnt].nxt=head[x],ee[cnt].w=w,ee[cnt].to=y,head[x]=cnt;}
void add_c(int x,int y,int w){ee_c[++cnt_c].nxt=head_c[x],ee_c[cnt_c].w=w,ee_c[cnt_c].to=y,head_c[x]=cnt_c;}

int dfn[M],low[M],nm;
bool bridge[M];
void tarjan(int x,int in_edge)
{
	dfn[x]=low[x]=++nm;
	for(int i=head[x];i;i=ee[i].nxt)
	{
		int y=ee[i].to;
		if(!dfn[y])
		{
			tarjan(y,i);
			low[x]=min(low[x],low[y]);
			if(low[y]>dfn[x])bridge[i]=bridge[i^1]=t
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于题目所给的问题涉及到金融领域的数学计算和数据处理,需要一定的专业知识和代码实践经验。以下提供部分代码框架以及简要说明,供参考: 1. COVAR(协方差)计算代码: COVAR的计算可以使用金融统计学中的公式,用来衡量两个变量之间的关系。一般计算协方差时需要使用原始数据,假设有n个观测值,其中X和Y是两个变量的向量,那么COVAR的计算可以使用以下代码框架: ``` # 原始数据 X = [1, 2, 3, 4, 5] Y = [2, 4, 6, 8, 10] # 计算平均值 mean_X = sum(X) / len(X) mean_Y = sum(Y) / len(Y) # 计算COVAR covar = sum((x - mean_X) * (y - mean_Y) for x, y in zip(X, Y)) / (len(X) - 1) print("COVAR:", covar) ``` 2. MES(最小二乘法)计算代码: MES的计算可以通过对一组原始数据应用最小二乘法来计算出最小二乘估计量。假设有原始数据X和Y,可以使用scipy库中的polyfit函数来拟合线性回归模型,并计算MES。以下是示例代码: ``` import numpy as np from scipy.stats import linregress # 原始数据 X = [1, 2, 3, 4, 5] Y = [2, 4, 6, 8, 10] # 计算MES slope, intercept, _, _, _ = linregress(X, Y) print("MES:", slope) ``` 3. DCC(动态相关系数)计算代码: DCC用来测量两个时间序列之间的动态相关性,常用于金融风险管理和投资组合分析。可以使用arch包进行DCC模型的拟合和估计。以下是一个简单的示例代码: ``` import pandas as pd from arch import arch_model # 原始数据 data = pd.read_csv("data.csv") # 假设数据存放在data.csv文件中,需要读取并预处理数据 # 计算DCC am = arch_model(data, vol='DCC', dist='normal') res = am.fit(disp='off') print("DCC:", res.params) ``` 这些示例代码只是提供了最基本的框架,具体的计算过程和数据处理方式需要根据实际情况进行调整。建议在实际应用中,根据具体的数据和需求,参考相应的金融统计学理论,并使用专业的金融数据分析工具和包来完成计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值