首页 > 其他分享 >CF292D Connexted Components

CF292D Connexted Components

时间:2024-01-31 22:12:00浏览次数:27  
标签:10005 连通 Connexted int 无用 Components CF292D 从左往右 es

原题传送门

分析

首先一眼看到这个题,第一个想到的肯定是 dfs 暴力每次询问时从左往右把边一条一条加进来,再从右往左加一遍,然后维护连通块个数。但是这样的复杂度显然是 \(O(mk)\) 的。所以我们需要一些优化。

注意到在加边的时候有些边并不会改变连通块的个数。这些边我先称之为无用边。于是我们可以进行两次预处理,一次从左往右,一次从右往左。每次预处理的时候把所有无用边删去,只存非无用边的编号,放在另一个数组里。然后每次询问的时候就从两边暴力这个数组,像普通并查集一样加边、维护就好了。这样的复杂度一下就降到了 \(O(nk\alpha(n))\),因为有用边不会超过 \(n-1\) 条。

代码

#include <iostream>
using namespace std;
struct edge {
    int u, v;
} es[10005];
int fids[10005], eids[10005]; // 两侧的有用边
int f[10005];
int n, m;
int ccnt;
inline void ini() {
    ccnt = n; // 初始连通块共 n 个
    for (int i = 1; i <= n; i++) f[i] = i;
}
int getf(int x) { return (f[x] == x ? x : f[x] = getf(f[x])); }
inline bool murge(int x, int y) {
    x = getf(x), y = getf(y);
    if (x != y) {
        f[x] = y;
        ccnt--;    // 一次成功合并会使连通块个数少1个
        return true; // 返回值为真说明成功进行了合并
    }
    return false; // 反之则没有发生合并
}
int fcnt, ecnt;
int main() {
    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        scanf("%d%d", &es[i].u, &es[i].v);
    }
    ini();
    for (int i = 1; i <= m; i++) {    // 从左往右枚举
        if (murge(es[i].u, es[i].v)) // 是有用边
            fids[++fcnt] = i;     // 把编号存起来
    }
    ini();
    for (int i = m; i >= 1; i--) {    // 从右往左枚举
        if (murge(es[i].u, es[i].v)) // 是有用边
            eids[++ecnt] = i;     // 把编号存起来
    }
    int q;
    scanf("%d", &q);
    int l, r;
    for (int i = 1; i <= q; i++) {
        ini(); // 每次询问都需要初始化
        scanf("%d%d", &l, &r);
        for (int j = 1; fids[j] < l && j <= fcnt; j++) murge(es[fids[j]].u, es[fids[j]].v); // 从左往右暴力
        for (int j = 1; eids[j] > r && j <= ecnt; j++) murge(es[eids[j]].u, es[eids[j]].v); // 从右往左暴力
        printf("%d\n", ccnt);
    }
    return 0;
}

完结撒花~~~

标签:10005,连通,Connexted,int,无用,Components,CF292D,从左往右,es
From: https://www.cnblogs.com/forgotmyhandle/p/18000233

相关文章

  • 一、@Configuration、@Conponent 、@ComponentScan 注解等
    一句话概括区别:@Configuration中所有带@Bean注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例。2.可以直接调用方法,不需要@Autowired注入后使用。@Conponent 声明为Spring的组件。修饰的类不会被代理,每实例化一次就会创建一个新的对象。2.一般情况下@Bean......
  • Web Components从技术解析到生态应用个人心得指北
    WebComponents浅析WebComponents是一种使用封装的、可重用的HTML标签、样式和行为来创建自定义元素的Web技术。WebComponents自己本身不是一个规范,而是一套整体技术,包含下面3个独立规范:CustomElements:允许开发者定义自己的HTML标签(考虑SEO,还是语义化为好)。Sha......
  • 完美解决SqlServer2012启动报错(cannot find one or more components.Please reinstall
    原因:默认安装在C:\ProgramFiles(x86)\MicrosoftVisualStudio10.0文件夹,以支持sqlserver2012.(我之前不小心把这个文件夹删除了)。解决方案:下载了visualstudio2010Isolatedshell完美解决问题,下载后安装就能正常运行SqlServer2012了,其他SqlServer版本请下载visualstudio......
  • 一个功能更强大,性能更高的树控件DevComponents.AdvTree.AdvTree(几种树形控件汇总)
    原文链接:https://www.cnblogs.com/a7373773/archive/2009/07/27/1532236.html一直在用DevComponents.DotNetBar2 控件近来探索Add()和AddRange()的性能问题。一样用极为不专业不科学的方法,比较DevComponents.AdvTree.AdvTree的Add()和AddRange()的性能 1private void butt......
  • Vite Components插件
    作用Components引于unplugin-vue-components,用于解决vue文件内无需手动引入组件,减少import的调用基本配置在vite配置文件中,作为插件使用import{defineConfig}from'vite'importComponentsfrom'unplugin-vue-components/vite'exportdefaultdefineConfig((mode)=......
  • PCA(Principal Components Analysis)主成分分析: 一维列向量坐标的变换是左乘变换矩阵
    总结:一维列向量的坐标变换是左乘变换矩阵;一维行向量的坐标系基元变换是右乘变换矩阵;坐标变换坐标变换定义:把一个向量(或一个点)从一个高维(或3D)坐标系,转换到另一个高维(或3D)坐标系去。举个栗子:东北天坐标系上的点A坐标为(1,2,3),通过坐标变换到北西天坐标系,点A......
  • components之infiniteScroll 注意事项
    先吐槽,看官方示例代码看的一头雾水使用方式:1.按官方文档来<InfiniteScroll  ref={ref}  style={{backgroundColor:'#ffffff'}}  hasMore={hasMore}  loadMore={loadMore}  data={list}  keyExtractor={(word)=>word}  renderItem={({item:......
  • uniapp插件市场上架插件,提示components不包含对应包名称的组件
    第一次在uniapp上架了一个小组件,所有的都按照文档填写上传了,但是提交的时候一直提示不行原来是在压缩组件源码的时候出问题,不要把components和static放在一个文件夹下面压缩文件夹,要直接把components和`static``组合压缩就行。这是错误的这是正确的......
  • ApplicationContext is unlikely to start due to a @ComponentScan of the default p
    springboot警告:ApplicationContextisunlikelytostartduetoa@ComponentScanofthedefaultpackage解决办法:1、一般发出这个警告的原因是你把启动类直接放在的src目录下面。2、你需要在src目录下面再建一个包,然后把启动类放到下面。3、或者你错将启动类放到java文件中了......
  • error: The “xx“ component has been registered but not used (vue/no-unused-comp
    ......