jzoj6495 死星 (竞赛图五元环)
题意
给你一个竞赛图,求其中3,4,5元环的个数。
n<=2000
分析
- 3,4元环都很简单。现在来看看这个五元环
- 可以先画几个五元环看看。我拿到这个题有两种思路:像无向图那样按度数算复杂度,或者用bitset进行一些加速。前者很快被我毙掉了,有向图和无向图并不是一回事。
- 竞赛图是本题的一个重要条件。不应该当成稠密的有向图来考虑。
- 尝试直接计算5元环个数无果,按剧本应该进行一些容斥。
- 不如看看五元非环的个数是否好计算。
- 注意到一个五元非环等价于存在入度为2的点,进一步可以发现最多有两个入度=2的点。而且情况简单,无论个数是1还是2均只存在一种形态。
- 于是,先计算出每个五元环或非环内所有入度为2的点数之和。
- 此时,第二类情况被我们计算了两次。并且第二类情况的个数可以通过O(n3/w)O(n^3/w)O(n3/w)的操作加上一些非常简单的讨论算出来。
- 有一个要注意的地方就是,你所选的五元环是否有顺逆时针,计数时要上下意义一致。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e3 + 10;
int e[N][N];
ll n, k;
bitset<N> out[N], in[N];
char s[1000010];
int a[N];
ll ans;
int main() {freopen("deathstar.in", "r", stdin);// freopen("deathstar.out", "w", stdout);cin >> n >> k;scanf("%s",s+1);for(int i = 1, z = strlen(s + 1), x = 1, y = 2; i <= z; i++) {int v = s[i] >= 'A' ? 10 + s[i] - 'A' : s[i] - '0';for(int j = 3; ~j; j--) {e[x][y] = (v & (1 << j)) != 0;e[y][x] = !e[x][y];if (y++ == n) x++, y = x + 1;}}for(int x = 1; x <= n; x++) {for(int y = 1; y <= n; y++) if (e[x][y]) {in[y][x] = 1;out[x][y] = 1;}}if (k == 3) {for(int i = 1; i <= n; i++) {for(int j = 1; j <= n; j++) if (e[i][j]) {ans += (in[i] & out[j]).count();}}ans /= 3;} else if (k == 4) {for(int i = 1; i <= n; i++) {for(int j = i + 1; j <= n; j++) {ans += (ll)(in[i] & out[j]).count() * (out[i] & in[j]).count();}}ans /= 2;} else {ans = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) / 10;for(int i = 1; i <= n; i++) {ll v = in[i].count();ans -= v * (v - 1) / 2 * (n - 3) * (n - 4);}ll sum = 0;for(int i = 1; i <= n; i++) {for(int j = i + 1; j <= n; j++) {ll z = (in[i] & in[j]).count();ans += z * (z - 1) * (in[j].count() - e[i][j] - 2);ans += z * (in[i].count() - e[j][i] - z) * (in[j].count() - e[i][j] - 1);}}}cout << ans << endl;
}
jzoj6495 死星 (竞赛图五元环)相关推荐
- 概率模型分子动力学模拟五元环吡咯C4H5N
吡咯是一种非常重要的化学物质,特别是这种物质对人来说有一种果香.吡咯中有两个双键,整个吡咯环是在一个平面上,应该是一种高度对称的结构,根据这种结构用神经网络反向传导方法制作了吡咯的模型 经过多次试验这 ...
- 【IoT】产品经理进阶之道:五元方法论
首先从个人经历的四个阶段入手,谈谈为什么要用势道法术器五元论来建立产品思维? 做产品一般至少需要经历四个阶段,分别是工具人阶段.套路阶段.流程阶段和方法论阶段. 分别对应五元论中的器.术.法.道,对于 ...
- 模拟3个人排除买票,每人买1张票。售货员只有1张五元的钱,电影票5元一张
解决线程同步问题 模拟3个人排除买票,每人买1张票.售货员只有1张五元的钱,电影票5元一张,王大拿拿一张二十元的人民币排在谢大脚前面买票,谢大脚拿1张十元的人民币排在在赵四的前面买票,赵四拿1张五元的 ...
- 【学习笔记】无向图、有向图的三元环、四元环计数问题(根号分支+bitset)
三元环计数和四元环计数问题 无向图三元环计数问题 根号分治 bitset 无向图四元环计数问题 有向图三四元环计数问题 无向图三元环计数问题 根号分治 记 di:id_i:idi:i 在原图中的度数 ...
- 三元环计数四元环计数
三元环计数 问题 给出一张n个点m条边的无向图,问图中有多少个三元组{ u , v , w } ,满足图中存在 { (u,v) , (v,w) , (w,u) } 三条边. 求解 Step1 定向 将 ...
- 1956年五元钱币市值多少?
1956年5元人民币隶属于第二套人民币,不少人连见都没见过,你就说它的存世量能有多少? 所以它的价值一定会很高,第二套人民币有三元的你见过吗?也没有,现在第二套人民币可以说价值一路攀升,只要你有一张第 ...
- 要求用 100 元买 100 只鸡,其中公鸡五元一只,母鸡三元一只,小鸡 1 元三只,规定每种至少买一 只
要求用 100 元买 100 只鸡,其中公鸡五元一只,母鸡三元一只,小鸡 1 元三只,规定每种至少买一 只 public static void main(String[] args) {for(in ...
- 小明拿了一百块钱买了三块钱的东西,老板找他97块钱, 请问,老板有多少种找法(1元,五元,十元,20元,50元)
public class Test08{ /** 小明拿了一百块钱买了三块钱的东西,老板找他97块钱,请问,老板有多少种找法(1元,五元,十元,20元,50元)*/public static void ...
- 计算钱币(编写程序,读取用户输入的代表总金额的double值,打印表示该金额所需的最少纸币张数和硬币个数,打印从最大金额开始。纸币的种类有十元、五元、一元,硬币的种类有五角、一角、贰分、壹分。)
法1(自己的笨方法,顺着往下想即可) import java.util.*; public class Main{public static void main(){Scanner reader = ...
- y7000p 2020 vbios_2020年冬季千元环300公里上笼验资明细-长沙市南湖赛鸽俱乐部
2020年冬季千元环300公里上笼验资明细 序号 鸽棚号 鸽 主 名 称 足 环 号 码 1 000001 吴军 2020-18-0041037 2 000001 吴军 2020-18-0041038 ...
最新文章
- Get/POST方法提交的长度限制
- Web API应用架构设计分析(1)
- 皮一皮:论家庭地位...
- 如何通过三视图判断立方体个数_如何通过接触角判断疏水性?疏水性与亲水性的区别...
- 2021HDU多校9 - 7073 Integers Have Friends 2.0(随机数)
- Matlab在坐标点上按顺序标序号
- react(82)--方法写在effects里面
- 【openMV与机器视觉】四旋翼飞行控制背景下的PID控制与摄像头算法简介
- bzoj3214 [Zjoi2013]丽洁体 dp
- 持久内存开发套件(Persistent Memory Development Kit-PMDK) - pmem.io: PMDK
- opencv-api resize
- html jsf ajax blur,是否可以使用JSF ajax更新非JSF组件(纯HTML)?
- 原来数据库里的单引号是这么加进去的
- php 过滤掉多维数组空值
- lighttpd,nginx,apache的性能负载比较
- java visualvm 内存泄露_如何使用VisualVM检测Java内存泄漏
- 智能玩具小风扇制作教程
- VMWare station 14密钥
- 绕过360实现lsass转储
- Unity鼠标拖拽旋转拉远拉近场景