H. Binary Craziness

news2024/10/7 8:25:37

题目链接
2023 Hubei Provincial Collegiate Programming Contest
在这里插入图片描述
Examples
input

6 6
1 3
2 3
1 4
2 5
3 6
4 6
output
30

input
6 4
1 2
3 5
2 4
3 6
output
0

题目大意:

给出结点个数 n n n和边的个数 m m m
下面依此给出 m m m个边,边是无向的,两端顶点为 u , v u,v u,v(注:允许自环)
定义deg i i i为顶点i的度
给出 f f f( u u u, v v v) = (deg u u u⊕deg v v v)(deg u u u | deg v v v)(deg u u u & deg v v v)
⊕ , | , & 分别是按位异或,按位或和按位且
求题目中的求和公式

题解

其实题目意思很简单,每个顶点和包括自生的其他顶点求一次 f f f然后相加,但是因为n有 1 0 6 10^6 106,如果挨个求就要O( n 2 n^2 n2)也就是O( 1 0 6 ∗ 1 0 6 10 ^6*10^6 106106)
就算剪枝掉度相等的两个结点(因为度相等,异或后结果为0,最后相乘也为0)和度为0的结点,也还是会TLE on 17,包括使用了离散化也是一样
那么我们可以反过来想,如果统计每一个度的结点数量,以这种角度去思考,那么相同度的结点就可以简化运算。包括使用离散化防止数据过于稀疏。

在这里插入图片描述
这里给出一个样例,如果是暴力算,就是第一个结点和其他结点去算,可以剪枝掉相同度的结点和度为0的结点,但这样有 n n n个结点就最多要算 n ( n − 1 ) / 2 n(n-1)/2 n(n1)/2
但如果是按照以度的角度去考虑
在这里插入图片描述
这个样例,度为1的有3个,度为2和度为3的结点各有1个,那么就可以将度为1和度为2的结点统一算,最后乘两个度结点和, ( 1 ∣ 2 ) ( 1 2 ) ( 1 ⊕ 2 ) ∗ 1 ∗ 3 (1|2)(1^2)(1⊕2)*1*3 (1∣2)(12)(12)13,相当于当有 n n n各度的时候每多一种不同的度,就多算 ( n − 1 ) (n-1) (n1)次即可。
那么根据图和规律可知,如果将 m a x d e g maxdeg maxdeg记做能出现不同度的最大数量,将 m a x j i e maxjie maxjie记作能出现不同结点的最大数量。那么显而易见 m a x d e g ≤ m a x j i e maxdeg \leq maxjie maxdegmaxjie,当然是远小于,因为要将度的种类+1,必须再多给 当前度的种类 当前度的种类 当前度的种类 个结点!
所以就算结点有 1 0 6 10^6 106个,最多就有 1413 1413 1413 个不同的度,时间复杂度一下子就降为 O ( 1413 ∗ 1413 ) O(1413*1413 ) O(14131413)
包括使用离散化,收集稀疏的数据

C++/C

#include <iostream>
#define int long long
using namespace std;
const int N =1e6+10;
const int M=998244353;
int a[N];
int que[N];int que_i=0;
int deg[N];
signed main(void){
    int n,m;
    cin>>n>>m;
    int ans=0;
    while(m--){
        int x,y;
        scanf("%lld %lld",&x,&y);
        a[x]++;
        a[y]++;
    }
    for(int i=1;i<=n;i++){
        if(!deg[a[i]])que[que_i++]=a[i];
        deg[a[i]]++;
    }
    for(int i=0;i<que_i;i++){
        for(int j=i+1;j<que_i;j++){
            ans = (ans%M + ((que[j]^que[i])* (que[j]|que[i]) * (que[j]&que[i]) * deg[que[j]]*deg[que[i]])%M)%M;
        }
    }

    //ans=(ans+(a[que[i]]^a[que[j]])*(a[que[i]]|a[que[j]])*(a[que[i]]&a[que[j]]))%M;
    cout<<ans%M;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514062.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux三种网络模式 | 仅主机、桥接、NAT

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Linux三种网络模式 仅主机模式&#xff1a;虚拟机只能访问物理机&#xff0c;不能上网 桥接模式&#xff1a;虚拟机和物理机连接同一网络&#xff0c;虚拟机和物理机…

字典核心底层原理

字典对象的核心是散列表。散列表是一个稀疏数组&#xff08;总是有空白元素的数组&#xff09;&#xff0c;数组的每个单元叫做bucket。每个bucket有两部分&#xff1a;一个是键对象的引用&#xff0c;一个是值对象的引用。 由于&#xff0c;所有bucket结构和大小一致&#xf…

服装厂的管理系统如何选?内行人:这4点一定要注意!

服装厂管理水平偏低&#xff0c;耗费大量时间和资金成本&#xff0c;导致利润越来越低&#xff0c;是现在很多中小服装厂普遍面临的痛点。 依靠传统的管理模式&#xff0c;口头询问生产进度&#xff0c;手写统计数量&#xff0c;很显然不适合现代工厂的管理模式&#xff0c;服装…

java开发记录V1

编辑器vscode 在vscode中安装配置springboot 下载安装jdk oracle jdk BellSoft Liberica JDK version 17 在vscode编辑器中安装相关组件Extension Pack for Java、Spring Boot Extension Pack、Spring Initializr Java Support 创建springboot项目&#xff1a;ctrlshiftp后…

【Midjourney】Midjourney 辅助工具 ① ( 自定义命令工具 | 设置描述词 | 设置风格 | 设置灯光 | 设置相机 | 设置艺术家 )

文章目录 一、Midjourney Prompt Tool 自定义命令工具1、设置描述词2、设置风格3、设置灯光4、设置相机参数5、设置艺术家参数 Midjourney 提示词命令 可以使用 辅助工具 进行生成 , 辅助工具如下 : Midjourney Prompt Tool 自定义命令工具Midjourney Prompt Generator 命令生…

软件测试踏入这三个误区,就离滚蛋不远了

误区一&#xff1a;测试都是女生&#xff0c;男生不适合 误区二&#xff1a;这个职位很简单&#xff0c;不需要很多技术含量&#xff0c;每天很闲 误区三&#xff1a;起步即巅峰&#xff0c;薪资提升空间不大&#xff0c;一线才八九千 如果你听到这样的言论&#xff0c;赶紧走…

AssetBundle加载与卸载时的内存变化

AssetBundle.LoadFromFile加载一个80MB的assetbundle会分配1MB左右的pss内存 adb分析&#xff1a;private-otherUnityProfiler分析&#xff1a;有3块 1.Other/AssetBundle/LoadingCache 2.Other/SerializedFile/archive:/CAB-e42axxxxxxx 3.NotSaved/AssetBundle/xxxxxx.ab …

陷入“产品纠结”的王振滔,与学不来波司登的奥康

文|螳螂观察 作者| 青月 曾经的一代“鞋王”奥康&#xff0c;正在走下神坛。 4月底&#xff0c;奥康国际披露了2022年的年报&#xff0c;数据显示&#xff0c;公司归母净利润亏损3.7亿元&#xff0c;同比下滑1185.93%。此外&#xff0c;公司年报还被出具了保留意见的审计报告…

Revit创建装饰纹路柱及CAD生成柱

一、Revit中如何创建装饰纹路的柱子 在罗马柱的外观中&#xff0c;很少存在圆滑的柱身&#xff0c;在Revit中&#xff0c;可以用阵列的方式&#xff0c;更快的装饰柱子。 在族样板中&#xff0c;采用拉伸的方式先创建一个柱子 采用空心拉伸为柱子绘制花纹 选择圆形工具绘制&…

C语言的数据类型

数据类型 变量和常量 常量的2种定义方式&#xff1a; 1、关键字const const 数据类型 常量名 值; 如&#xff1a;const float pi 3.14159; 2、宏定义 #define 常量名 值 PS: 这里没有"“和”;" 如&#xff1a;#define PI 3.14159 推荐用宏定义的方式定义常量。 整…

Thradlocal底层原理

java引用&#xff1a;强软弱虚 软引用空间不足时会被回收 软引用非常适合做缓存 弱引用&#xff1a;只要有垃圾回收&#xff0c;就会被回收 虚引用回不回收都拿不到 他只有一个作用&#xff0c;管理直接内存 也是只要有垃圾回收就会被回收 ThreadLocal Spring事务&#x…

【职场新人备忘录】新人职场生存指南:快速适应、持续成长和个人提升

新人职场生存指南&#xff1a;快速适应、持续成长和个人提升 引言 职场对于新人来说充满了新的挑战和机遇。作为一名新人&#xff0c;如何在职场中快速适应、获得成长和提升自己是至关重要的技能。本备忘录旨在为职场新人提供实用的职场tips&#xff0c;帮助他们在职场中取得…

Ubuntu 20.04 安装 mysql 并配置远程访问

文章目录 一、使用 apt-get 安装 mysql 服务二、初始化 mysql 数据库管理员用户密码三、配置远程访问 一、使用 apt-get 安装 mysql 服务 # 更新软件源 apt-get install update# 安装mysql服务 apt-get install mysql-server# 使用mysqladmin工具查看mysql版本 mysqladmin --v…

Set和Map学习笔记

参考链接&#xff1a;https://blog.csdn.net/weixin_43359799/article/details/123131917 Set 集合&#xff0c;存储的是value值,以对象形式存储,并且不会存储重复的值&#xff0c;可以用来数组去重。 const s new Set() [1, 2, 3, 4, 3, 2, 1].forEach(x > s.add(x)) c…

景区户外剧本杀小程序冲关软件

景区户外剧本杀小程序具有以下几个方面的市场前景&#xff1a; 旅游市场需求增加&#xff1a;随着人们对于旅游方式的多样化需求增加&#xff0c;景区户外剧本杀作为一种互动性强、参与感强的旅游体验项目&#xff0c;将会得到越来越多游客的喜爱和关注。 移动互联网应…

对称加密和非对称加密的区别

两个人有不想让第三者知道的事情&#xff0c;可以找一个私密的空间去聊。而互联网本身是一个开放的体系&#xff0c;双方在交换数据的时候会经历大量的第三者——公司的防火墙、ISP 的路由器&#xff0c;还有可能有黑客抓取数据。那么这个时候如果张三和李四有私密的话想聊&…

游戏是怎么做推广的

游戏是怎么做推广的 大家好我是艾西&#xff0c;今天是我们的闲聊日记&#xff0c;大家都知道我是一直做游戏相关的事情&#xff0c;不管是开发、运营还是资源渠道等都是不可少的因素&#xff0c;那么在这长时间的积累下还是有一些直接的心得以及方式方法的。今天我们主要聊的…

企业电子招标采购系统源代码Spring Boot + 二次开发 + 前后端分离

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…

java计算机二级部分知识点

参考来源 java计算机二级内容总结 百度图片 C/C版数据结构之树<一> 线性结构 如果一个数据满足下面两个条件&#xff1a;1&#xff09;有且只有一个根节点&#xff1b;2&#xff09;每一个节点最多有一个前件&#xff0c;也最多有一个后件&#xff0c;则称该数据为线性…

图神经网络入门:理论与实践

图神经网络&#xff08;Graph Neural Networks&#xff0c;GNNs&#xff09;是一种针对图数据进行建模和处理的深度学习模型&#xff0c;其具有在推理和预测具有高度关联和复杂结构的数据中具有优势等特点。与传统的神经网络不同&#xff0c;GNNs 能够自适应地根据图结构进行信…