hdu6200mustedge mustedge mustedge

用ESP32-S3打造迷你录音笔:SPIFFS存储+INMP441麦克风全流程解析 本文详细解析了如何使用ESP32-S3微控制器与INMP441数字麦克风构建迷你录音笔。内容涵盖硬件选型、I2S驱动配置、SPIFFS文件系统存储管理以及WAV格式封装等全流程,重点探讨了在资源受限的嵌入式设备上实现高质量语音采集与存储的优化方案和实战技巧。 阅读详情

Give an connected undirected graph with n nodes and m edges, (n,m≤105) which has no selfloops or multiple edges initially.
Now we have q operations (q≤105):

⋅1 u v: add an undirected edge from u to v; (u≠v&&1≤u,v≤n)
⋅2 u v: count the number of mustedges from u to v; (1≤u,v≤n).

mustedge: we define set Ei as a path from u to v which contain edges in this path, and |∩k1Ei| is the number of mustedges. |x| means size of set x, and E1,E2…Ek means all the paths.
It’s guaranteed that ∑n,∑m,∑q≤106

Please note that maybe there are more than one edges between two nodes after we add edges. They are not the same, which means they can be in a set at the same time. Read the sample data for more information.

Input
Input starts with an integer T, denoting the number of test cases.
For each case:
First line are two number n and m;
Then next m lines, each contains two integers u and v, which indicates an undirected edge from u to v;
Next line contains a number q, the number of operations;
Then next q lines, contains three integers x, u and v where x
is the operation type, which describes an operation.

Output
For each test case, output “Case #x:” where x is the test case number starting from 1.
In each test case, print a single number one line when query the number of mustedges
.
Sample Input

2
4 3
1 2
2 3
3 4
5
2 1 4
1 2 3
2 1 4
2 2 3
2 2 4
8 9
1 2
2 3
1 3
3 4
4 5
4 6
5 7
5 8
7 8
5
2 7 8
2 1 6
2 4 7
1 6 8
2 5 6

Sample Output

Case #1:
3
2
0
1
Case #2:
0
2
1
0

题意:有两种查询 第一种是将u,v两个点之间连一条边,另一种是查询u到v路径上的割边有几条。
题解:具体方法和我上篇博客差不多是从航线规划中抽出的模型。这个问题最直接的想法就是缩点然后生成一棵树,然后树剖维护路径。那么复杂度是qlognlogn,每次查询树剖一个log,线段树一个大常数log。这题首先卡你内存。。。我的AC代码C++可以,G++不行。然后卡你时间。。。应该是卡了树剖那个log。所以只能用另一个暴力合并的维护子树深度的方法。
=-=。做这题的时候深深感受到了没有大神给我看思路自己想自己码的绝望。。平时都觉得没事。。。码不出还能看题解。。这次有点绝望。。。在icpccamp看到了一波大佬的提示,然后就自己码了好久=-=回来回馈一下社会
听说还能用lct做 蒟蒻好久以前就准备学到现在还没看懂定义ORZ

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;

//thanks to pyf ...
//thanks to qhl ...

const int N = 1e5 + 1;

vector<pair<int,int> > edges;
vector<int> G[N],g[N];
bool is_cut[N*2];
int dfn[N],low[N],L[N],R[N];
int Index = 0,id = 0;
int fa[N],f[N][21],dep[N];
int n;
void init()
{
    Index = 0, id = 0;
    memset(dfn,0,sizeof(dfn));
    memset(is_cut,0,sizeof(is_cut));
    for(int i = 0;i<N;i++)
        G[i].clear(),g[i].clear(),fa[i] = i;
    edges.clear();
}
void add_edge(int u,int v)
{
    edges.push_back(make_pair(u,v));
    G[u].push_back(edges.size() - 1);
    edges.push_back(make_pair(v,u));
    G[v].push_back(edges.size() - 1);
}
void tarjan(int u,int Fa)
{
    dfn[u] = low[u] = ++ Index;
    for(int i = 0;i != G[u].size();i ++)
    {
        int v = edges[G[u][i]].second;
        if(v == Fa)
            continue;
        if(!dfn[v])
        {
            tarjan(v,u);
            low[u] = min(low[v],low[u]);
            if(low[v] > dfn[u])
                is_cut[G[u][i]] = is_cut[G[u][i] ^ 1] = true;
        }   
        else low[u] = min(low[u],dfn[v]);
    }
}
int find(int x)
{
    if(x != fa[x])
        fa[x] = find(fa[x]);
    return fa[x];
}
void merge(int u,int v)
{
    u = find(u), v = find(v);
    if(u == v)
        return;
    if(dep[u] > dep[v])
        swap(u,v);
    fa[v] = u;
}
void Create_Graph()
{
    for(int i = 1;i<=n;i++)
        tarjan(i,i);    
    for(int i = 0;i<edges.size();i++)
    {
        int u = edges[i].first, v = edges[i].second;
        if(!is_cut[i])
            merge(u,v);
    }
    for(int i = 0;i<edges.size();i++)
    {
        int u = edges[i].first, v = edges[i].second;
        if(is_cut[i])
            g[find(u)].push_back(find(v));
    }
    for(int i = 1;i<=n;i++)
    {
        sort(g[i].begin(),g[i].end());
        g[i].erase(unique(g[i].begin(),g[i].end()),g[i].end());
    }
}
void dfs(int u,int Fa,int d)
{
    dep[u] = d,f[u][0] = Fa;
    for(int i = 1;i<=20;i++)
        f[u][i] = f[f[u][i-1]][i-1];
    L[u] = ++ id;
    for(int i = 0;i != g[u].size();i ++)
    {
        int v = g[u][i];
        if(v == Fa)
            continue;
        dfs(v,u,d+1);
    }
    R[u] = id;
}
int lca(int u,int v)
{
    if(dep[u] < dep[v])
        swap(u,v);
    for(int i = 20;i>=0;i--)
        if(dep[f[u][i]] >= dep[v])
            u = f[u][i];
    if(u == v)
        return u;
    for(int i = 20;i>=0;i--)
        if(f[u][i] != f[v][i])
            u = f[u][i], v = f[v][i];
    return f[u][0];
}
struct Tree
{
    int vis,sum;
}t[N*4];
void push_down(int l,int r,int step)
{
    int mid = (l + r) / 2;
    if(!t[step].vis)
        return;
    t[step * 2].vis += t[step].vis;
    t[step * 2 + 1].vis += t[step].vis;
    t[step * 2].sum += t[step].vis * (mid - l + 1);
    t[step * 2 + 1].sum += t[step].vis * (r - (mid + 1) + 1);
    t[step].vis = 0;
}
void build()
{
    memset(t,0,sizeof(t));
}
void update(int l,int r,int ql,int qr,int val,int step)
{
    if(l == ql && r == qr)
    {
        t[step].vis += val;
        t[step].sum += (r - l + 1) * val;
        return;
    }
    int mid = (l + r) / 2;
    push_down(l,r,step);
    if(qr <= mid)
        update(l,mid,ql,qr,val,step*2);
    else if(ql > mid)
        update(mid + 1,r, ql,qr,val,step*2+1);
    else update(l,mid,ql,mid,val,step * 2),update(mid+1,r,mid+1,qr,val,step*2+1);
}
int query(int x,int l,int r,int step)
{
    if(l == r)
        return t[step].sum;
    int mid = (l + r) / 2;
    push_down(l,r,step);
    if(x <= mid)
        return query(x,l,mid,step*2);
    else return query(x,mid+1,r,step*2+1);
}
void link(int u,int v)
{
    u = find(u), v = find(v);
    int anc = find(lca(u,v));
    while(find(u) != find(anc))
    {
        update(1,n,L[find(u)],R[find(u)],-1,1);
        merge(find(u),f[find(u)][0]);
    }
    while(find(v) != find(anc))
    {
        update(1,n,L[find(v)],R[find(v)],-1,1);
        merge(find(v),f[find(v)][0]);
    }
}
int Get_Ans(int u,int v)
{
    u = find(u), v = find(v);
    int anc = find(lca(u,v));
    return query(L[u],1,n,1) + query(L[v],1,n,1) - 2 * query(L[anc],1,n,1);
}
int main()
{
    int T;
    scanf("%d", &T);
    int ka = 0;
    while(T--)
    {
        int m;
        init();
        scanf("%d%d",&n,&m);    
        for(int i = 0;i<m;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            add_edge(u,v);
        }
        Create_Graph();
        build();
        dfs(find(1),find(1),0);
        for(int i = 1;i<=n;i++)
            if(find(i) == i)
                update(1,n,L[i],L[i],dep[i],1);
        int q;
        scanf("%d",&q);
        printf("Case #%d:\n",++ka);
        for(int i = 0;i<q;i++)
        {
            int op,x,y;
            scanf("%d%d%d",&op,&x,&y);
            if(op == 1)
                link(x,y);
            else printf("%d\n",Get_Ans(x,y));
        }
    }
}
39、高频 LLC 谐振转换控制系统动态优化算法分析与研究 本文针对高频下LLC谐振转换器动态性能差的问题,提出一种基于谐振电容器充放电估计动态切换时间的优化控制算法。通过改进状态轨迹控制方法,突破传统算法在谐振频率与开关频率相等条件下的限制,并结合新型采样策略有效抑制电压过冲。算法在MATLAB和SABER中完成仿真验证,并搭建基于STM32F407的原型系统进行测试,结果表明该方法显著缩短动态响应时间,提升系统稳定性。研究为高频、高功率密度开关电源的动态优化提供了可行解决方案。 阅读详情

相关推荐

VLA算法总结对比——RT1 / RT2 / Pi0 / Octo/ RDT / OpenVLA

本文主要针最近比较经典的VLA算法进行对比总结,暂不涉及到代码细节和实验细节上的展开,仅仅是从大面上掌握下目前VLA的一些思路和方法。

weixin_44580210的博客 9492

HDU 6200 mustedge mustedge mustedge(树链剖分LCA+并查集+BIT)

Description 给出一个nnn个点mmm条边的无向图,无重边无自环两种操作 1&nbsp;u&nbsp;v:1&nbsp;u&nbsp;v:1\ u\ v:在u,vu,vu,v之间加一条边 2&nbsp;u&nbsp;v:2&nbsp;u&nbsp;v:2\ u\ v:查询uuu到vvv的路径上割边数量 Input 第一行输入一整数TTT表示用例组数,每组用例首先输入两个整数n,...

ZSQ 400

费斯托SPAN压力传感器的调试

本体为压力传感器,检测气压大小,通过设置参数,在上电上气时对气压进行判断,进而通过自身逻辑的判断,控制传感器的通断,进而控制机械部位的工作与运行;通电之后为如下图所示的样子有三个按键ABEdit键(编辑键、确认键)两步即可轻松连接。

大小曲奇的博客 1万+

HDU-6200 mustedge mustedge mustedge

给出一个图,保证没有自环和重边,接下来有两种操作 1:u,v 在u,v之间加一条边 2:u,v 查询u,v路径的必经边的个数(就相当于桥)   给出图之后,先用Tarjan算法求出所有桥,还有Belong数组(标记每个点属于哪个强连通分量) 接下来用dfs重新建图,实际上建出来是一个树,保存每个点的父节点,以及在树中的深度   接下来对于2操作,就是寻找u,v所在的点(强连通分量)的...

wl16wzl的博客 334

Jasypt 开源加密库使用教程

Jasypt 加密框架概述 1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,出于安全考虑,Spring boot 配置文件中的敏感信息通常需要对它进行加密/脱敏处理,尽量不使用明文,要实现这一点,办法有很多,自己手动对敏感信息进行加解密也是可以的。 2、有需求就有人奉献,Jasypt 开源安全框架就是专门用于处理 Spring boot 属性加密的,在配置文件中直接配置密文,然后应用启动的时候,Jasypt 会自动将密码解密成明文供程序使用。 3、

蚩尤后裔-汪茂雄 3万+

一种基于因果干预的少样本学习的故障诊断模型

本文提出CIRNet,一种融合元学习与因果干预的少样本故障诊断框架。针对传统方法易学习伪相关特征的问题,CIRNet通过构建结构因果模型,采用类级和特征级双调整策略消除先验知识干扰。实验在多个轴承/齿轮数据集上验证其有效性,在跨组件任务中准确率最高达93.41%,特征可视化显示更好的类可分性。相比现有方法,CIRNet显著提升了模型泛化能力和可解释性。

hasakie的博客 955

Hdu-6200 mustedge mustedge mustedge(动态树+并查集)

Give an connected undirected graph with n nodes and m edges, (n,m≤105) which has no selfloops or multiple edges initially. Now we have q operations (q≤105):    ⋅1 u v: add an

WZJRJ28 496

从零开始安装pytorch(包含GPU和CPU版本的安装)

Pytorch是。

qiaoxinyu1989的博客 8万+

hdu2017沈阳网络赛补题(一)mustedge mustedge(数剖求lca+树状数组)

正式准备非常に写题前,先立个flag,倒过来写hdu(笑~)先是最后一页的第一题(大笑~)mustedge mustedge(这题的求解受到https://post.icpc-camp.org/d/724-hdoj-6200-mustedge-mustedge-mustedge的启发) 以及可以看http://blog.youkuaiyun.com/luotuoqingshan/article/detail

invariance的博客 377

从0到1做AI漫剧:即梦+豆包+剪映+红果全流程实战

AI视频生成正在重塑内容创作的生产方式,它让原本高门槛的影视制作,变成了一条由文本、画面、剪辑与分发环节协同的流水线。理解其底层原理,在于将大模型的语义理解、图像生成与视频合成能力,与工程化的流程管理相结合,从而实现从创意到成片的自动化输出。这种技术的价值,不仅体现在降低制作成本,更在于让个人创作者能够独立完成高质量短剧,并快速迭代内容。在短剧、短视频、广告营销等场景中,利用即梦生成画面、豆包编写剧本、剪映完成剪辑、红果进行分发的组合,已成为一种被广泛验证的实践路径。本文聚焦AI漫剧制作,从环境准备、分镜设

weixin_34072637的博客 380

A算法的蒙特卡洛树搜索

A*算法的蒙特卡洛树搜索 作者:禅与计算机程序设计艺术 1. 背景介绍 在人工智能和游戏开发领域,搜索算法是一个非常重要的研究方向。其中A算法和蒙特卡洛树搜索是两种广泛应用的经典算法。A算法是一种启发式搜索算法,通过评估各个节点到目标节点的启发式代价来引导搜索方向,在

AI天才研究院 1732

Sicily 1002. connected components in undirected graph

题目描述: 输入一个简单无向图,求出图中连通块的数目 输入: 输入的第一行包含两个整数n和m,n是图的顶点数,m是边数。1 以下m行,每行是一个数对v y,表示存在边(v,y)。顶点编号从1开始。 #include "iostream" #include "memory.h" using namespace std; const int MAX = 1001; in

liujan511536的专栏 1657

《低功耗方法学》翻译——第一章:介绍

第一章:介绍

记录所学,分享知识,结识挚友 2067

[HDU 6200] mustedge mustedge mustedge

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6200题目大意: 给出一个n个点m条边的连通无向图, 有两种操作, 1是新增一条无向边(u, v), 2是询问u->v的路径上必须经过的边的条数。思路: 答案就是将环缩点后的树上两点的距离。 先用tarjan缩点求出原图的树,对于每次加边会产生新环, 我们要维护树上两点的距离, 实际上只要维护每个点的深

zhysora的博客 416

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

hdu6200 mustedge mustedge mustedge

这个题好像链剖会T。然后后来学习了一下姿势。 见https://post.icpc-camp.org/d/724-hdoj-6200-mustedge-mustedge-mustedge/6然后我就实现了一下叉姐说的。一开始addedge那边写炸了。然后一直T,后来冷静了一下发现有问题。然后求lca由于内存的原因,我现在一般都用链剖了。#include <cstdio> #include <ios

luotuoqingshan的博客 695

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

mustedge mustedge mustedge HDU - 6200

2018TYUT暑期ACM模拟赛(3) mustedge mustedge mustedge HDU - 6200 这道题是完全看题解写的然后权当学习新算法和思想。 题意:有n组测试数据,n个点m条边。输入u,v表示u到v有变。接下来q个操作: 1 :u,v表示加上u,v的边 2:u,v查询u到v的”mustedge“有多少条。 思路: 1、Tarjan算法无向图缩点 2、用dfs...

DeathYmz的博客 487

hdu 6200 mustedge mustedge mustedge

Problem Description Give an connected undirected graph with n nodes and m edges, (n,m≤105) which has no selfloops or multiple edges initially.  Now we have q operations (q≤105):     ⋅1 u

lqybzx的专栏 517

HDU 6200 mustedge mustedge mustedge [LCT+缩点]

题意:给你n个点m条边,有q个操作: ①u和v之间加入一条边; ②询问u和v之间的桥的个数; 题解:刚刚开始的时候还以为需要边化点,后来发现其实只要记录bcc分量的个数减一就是桥的个数(因为是棵树= =),这样我们就可以通过LCT维护bcc,然后通过缩点减少复杂度和计算答案。(这里T了好久) 首先对于新加入的边,我们make_root(u);access(v);splay(v);得到这个环...

ACTerminate的博客 672

HDU6200 mustedge mustedge mustedge

不用看题就知道这是和什么tarjan、缩点或桥一类有关的题。 谁让他取题目叫一个mustedge还连续写3次的(哦,似乎是因为那个比赛的题目都是这个画风) 必须的边 》必须要经过的边 》 桥。 主要是动态维护问题,幸好只有加边操作。建dfs树之后,在dfs树上加边其实就是让dfs树上一些边没有用了。(就这一点我想了很久才想到,真是zz啊) 那么可以用树剖来维护这个东西(这不是显然...

weixin_30827565的博客 108

HDU6200 mustedge mustedge mustedge (2017 ACM/ICPC Asia Regional Shenyang Online)

传送门题目大意给出一张连通图,现在有两种操作: ⋅1 u v\cdot 1\ u\ v:向图中加入一条连接uu和vv的边 ⋅2 u v\cdot 2\ u\ v:询问uu和vv之间的必经边的条数思路首先随便找到一个生成树,每条边的初始权值为1,对于所有非树边(u,v)(u,v),将生成树上uu到vv的路径上的所有边的权值都变为0,那么询问时只需要回答uu到vv的边权和即可,这就很容易了。 然后

geng4512的专栏 597

hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)

hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 思路: 对于一颗树来说,其实就是统计u到v路径上白边的个数, 加边就是将u到v的路径上所有边都染黑,查询就是查询路径上白边的个数 由于树上每条边最多只会被修改一次,所以可以并查集暴力修改,每个点u指...

weixin_34234829的博客 191

hdu6200 mustedge mustedge mustedge (并查集+dfs序树状数组)

题意   给定一个n个点m条边无向图(n,m<=1e5)   支持两个操作     1.添加一条边     2.询问点u到点v的所有路径中必经边的条数   操作数<=1e5 分析   第一眼看起来像是要动态维护无向图的边双连通分量,看似无法做   其实可以这样想,假设我们有一个树,那么这个树上的每一条边都是必经边   现在假设多加一条非树边(u,v),那么相当于原树上...

weixin_30549657的博客 102

HDU 6200 mustedge ACM/ICPC 2017 Shenyang Online(LCT动态缩点)

说实话,之前一直觉得LCT的用法大致都知道了,比完赛才发现LCT还有这种操作……         大致题意:给你一个无向图,初始时没有重边和自环,然后可以支持不断的加边和询问操作。每次询问时,输出u到v的所有路径边集的交集大小。         所谓边集交集大小,即如果有u、v有两条完全不同的路径可以到达,那么这个交集大小就是0。如果有重合的部分,那么就是重合的边的数量。其实,这个交集如果没有考虑好确实也不知道该怎么处理。         这里我们先考虑两点之间若只有一条路径的情况,此时结果就是点的数量减去

alpc_qleonardo 871

HDU 6200 边双联通分量 + 并查集 + dfs序 + BIT

简略题意:初始给出一张无向图,两种操作: 1. 添加一条(u,v)(u, v)的无向边。 2. 问从uu到vv的路径上的割边有多少。假若不考虑添加边的操作,问有多少割边,我们只需要边双联通缩个点成树,树上的每个边都是割边。从而转化成树上两点间距离。从根dfs一下转化成有根树的问题。现在考虑添加边的过程,其实就是再缩点的过程,先不考虑如何缩点,假如缩了点之后,我们就需要动态更新两点间距离了。对此我

即使摸爬滚打,满身泥泞,我也要前进 467

[HDU5452]Minimum Cut

Problem Description Given a simple unweighted graph G(an undirected graph containing no loops nor multiple edges) with n nodes and m edges. Let Tbe a spanning tree of G . We say that a cut in G

UISG103的博客 926

HDU5361 In Touch(线段树 + 最短路)

传送门 恰逢才做过VFK的A+B Problem,发现这道题也可以那样搞。区间连边的时候,我们就可以给那个区间在线段树对应的标号上连边。 线段树也可以不建出来,直接当做一个标号的合集,不占用内存,只用模拟在线段树上找区间的过程就可以了。 如果不清楚的话,可以看下A+B Problem的题解里面配有插图。 连好边之后就可以直接跑Dijkstra。 分析一下时间复杂度,线...

weixin_33721427的博客 188

hdu-5876-Sparse Graph

hdu-5876-Sparse Graph

Seeker 1113
上一篇: bzoj1969LANE 航线规划
下一篇: 2014 icpc 西安现场赛 I - International Collegiate Routing Contest
OneDay_pyf
博客等级 码龄10年 6粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值