套路题(然而我没看题解做不出来) 题目大意:给你一个$n$个点,$m$条有向边的图.图中有$k$个标记点,求距离最近的标记点间距离. 数据范围:$n,m,k≤10^5$. 设$p_i表$示第$i$个标记点的编号,设$K$为最小正整数,满足$2^K≥k$. 我们在原图中新建点$S$和点$T$,做$2K$次最短路. 对于$K$个二进制位,将$k$个关键点分成两部分,以其中一部分为起点,向另一部分做最短路即可. 时间复杂度:$O(m\ \log\ n\ \log k)$ #include<bits/s…
题目描述 给你一个\(n\)个点\(m\)条边的有向图,有\(k\)个关键点.求一条最短的从一个关键点到另一个关键点的路径. \(n,m,k\leq 100000\) 题解 跑\(k^2\)次最短路显然会TLE 考虑两个不同的数有什么可以利用的性质. 其中会有至少一个二进制为不同! 所以可以枚举所有二进制位,从\(0\)的那边向\(1\)的那边跑最短路,再从\(1\)的那边向\(0\)的那边跑最短路. 这样最终答案一定会被计算到. 时间复杂度:\(O(m\log n\log k)\) 代码 #i…
题意:给你一张带权有向图,问你某个点集中,两两结点之间的最短路的最小值是多少. 其实就是dijkstra,只不过往堆里塞边的时候,要注意塞进去它是从集合中的哪个起始点过来的,然后在更新某个点的答案的时候,如果它是集合中的点,除了最开始入堆的那次以外,要再更新一遍,并且不能用从本身过来的路径进行更新. std虽然跑了20次dijkstra,但是还是有一些可取之处. 将一个集合中的每个数进行二进制拆分,然后枚举每一位,将该位为0的归入一个半,再将该位为1的归入另一半.这样划分log次,每次只取跨越两…
题意 给定一个有 \(N\) 个点 \(M\) 条边的无向图, 每条无向边 最多只能经过一次 . 对于边 \((u, v)\) , 从 \(u\) 到 \(v\) 的代价为 \(a\) , 从 \(v\) 到 \(u\) 的代价为 \(b\) , 其中 \(a\) 和 \(b\) 不一定相等. 求一个包含 \(1\) 号点的有向环, 使得环上代价之和最小. \(N \le 3 \times 10^4 , M \le 10^5 , 1 \le a, b \le 10^4\) , 保证没有重边和自环…
Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hibix opened purse and found there were some coins. He decided to buy a very nice watch in a nearby shop. He wanted to pay the exact price(witho…
Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6869    Accepted Submission(s): 2710 Problem Description Given a number N, you are asked to count the number of integers between A and B…
传送门 显然不能直接写多重背包. 这题可以用二进制拆分/单调队列优化(感觉二进制好写). 所谓二进制优化,就是把1~c[i]拆分成20,21,...2t,c[i]−2t+1+1" role="presentation" style="position: relative;">20,21,...2t,c[i]−2t+1+120,21,...2t,c[i]−2t+1+1的组合. 这样物品总个数就变成了∑log(c[i])" role="…
/*问你能不能将给出的资源平分成两半,那么我们就以一半为背包,运行多重背包模版 但是注意了,由于个数过大,直接运行会超时,所以要用二进制拆分每种的个数*/ #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ],vr[],dp[]; ],v[]; int numw; void cf(int n,int ok) { int i,j,sum,e; e=sum=; whil…
给你数列a,问你对它作m次求前缀异或和之后的新数列是什么. 考虑a1对最终生成的数列的每一位的贡献,仅仅考虑奇偶性, 当m为2的幂次的时候,恰好是这样的 2^0 1 1 1 1 1 ... 2^1 1 0 1 0 1... 2^2 1 3个0 1 3个0 ... 2^3 1 7个0 1 7个0 ... 于是,从做了i次操作之后的序列,变换到做了i+2^k次操作之后的序列,可以轻松地通过 for i = 1 to n-2^k a(i+2^k) := a(i+2^k) xor a(i) [*] 这样…
[题解]Coins(二进制拆分+bitset) [vj] 俗话说得好,bitset大法吼啊 这道题要不是他多组数据卡死了我复杂度算出来等于九千多万的选手我还不会想这种好办法233 考虑转移的实质是怎样的,就是对于一个\(dp\)数组表,平移\(val_i \times num_i'\)位然后异或起来,这样就直接bitset开就好了. 背包问题的转移就不说了,优化就是利用二进制来优化,方法就是,我们可以知道所有数都是二进制表示出来的,根据加法交换律以及背包转移的方法,我们从小往大枚举\(2^x\l…
\(Coins\) \(solution:\) 这道题很短,开门见山,很明显的告诉了读者这是一道多重背包.但是这道题的数据范围很不友好,它不允许我们直接将这一题当做01背包去做.于是我们得想一想优化. $bitset $ 优化: 这个是我最先想到的,因为这道题只牵扯到了能不能买,也就是说这个背包并没有什么权值(只有"可以"和"不可以")然后就是单纯的状态转移.而这不是我们的二进制最擅长的东西吗?(我们利用某一个硬币的面额进行更新时,直接用二进制的左右移和或运算即可)…
绝世好题 bzoj-4300 题目大意:题目链接. 注释:略. 想法: 二进制拆分然后用一个数组单独存一下当前答案即可. Code: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define N 100010 using namespace std; int a[N],p[32],f[N],mx[32]; inline char nc() {st…
传送门     大意: 有价值分别为1..6的大理石各a[1..6]块,现要将它们分成两部分,使得两部分价值之和相等,问是否可以实现.其中大理石的总数不超过20000. 解题思路: 妥妥的多重背包+二进制拆分,主要写一下二进制拆分存个档(儿时的噩梦). 总所周知,20,21,22,……2k-1从中挑选若干个相加可以得到0~2k-1中的任意数.那么将一个数s进行二进制拆分,首先要做的就是找到最大k满足2k-1<=s,设c=s-2k+1.显而易见20,21,……,2k-1,c可以从中挑选若干个数相加…
题意:给你n个点m条边的有向图,然后再给你k个不同的点,问你这k个点的最小距离: 解题思路:这道题最需要注意的就是k个点一定是不同的,那么有一个结论就是任意两个不同的数字中,在他们的二进制地表示中,一定有一位是不同的,这样,我们就可以按照这个规律,把这些数字分成两组,按他们的二进制在某一位是0或者1分组,然后对每一位都跑一次最短路,这里的数据的二进制不超过20位 #include<iostream> #include<algorithm> #include<cstdio>…
Senior Pan fails in his discrete math exam again. So he asks Master ZKC to give him graph theory problems everyday. The task is simple : ZKC will give Pan a directed graph every time, and selects some nodes from that graph, you can calculate the mini…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2069 首先,对于和 1 相连的点,一定是从某个点出发,回到另一个点: 所以需要枚举起点和终点,但做 n 遍 dijkstra 不太可行: 可以进行多起点最短路,一次知道了以一些点作为起点.另一些点作为终点的答案: 于是问题是如何划分起点和终点,使一定能找到最优解: 二进制划分,枚举每一位,这一位是 0/1 分成两部分,那么任意不同的两个数一定某一次被分到了不同的集合: 具体做法可以是从 1…
---题面--- 题解: 考场上看的这道题,,,当时70分算法打挂了,今天才知道这个也是原题.... 首先,对于不跟1相邻的边,肯定不会经过两次,因为经过两次就回来了,除了增加路径长度之外没有任何意义. 但是跟1相邻的边是可能会经过2次的,因为虽然增加了路径长度,但这次回来就直接到终点了,所以完全可能重复走. 那么有一个很容易发现的思路是,我们可以强制某一条边是出边(即从1点出去可以走的边),其他边则为入边,这样的话就可以强制走不同的路了,但这样时间复杂度较大.考虑优化它. 可以发现,这样分组的…
题目翻译 一些公司决定搭建一个更快的网络.称为"光纤网". 他们已经在全世界建立了很多网站.这 些网站的作用类似于路由器.不幸的是,这些公司在关于网站之间的接线问题上存在争论,这样"光纤网"项目就被迫终止了,留下的是每一个公司自己在某些网站之间铺设的线路. 如今,Internet 服务供应商.当想从网站 A传送数据到网站 B,就感到困惑了.究竟哪个公司 可以提供必要的连接. 请帮助供应商回答他们的查询.查询全部可以提供从网站 A到站定 B的线 路连接的公司. 输入描…
正题 题目链接:https://darkbzoj.tk/problem/2407 题目大意 \(n\)个点的一张无向图(但是正反权值不同),求一个从\(1\)出发回到\(1\)且不经过重复边的最短路径. \(1\leq n\leq 10000,1\leq m\leq 2\times 10^5\) 解题思路 考虑一个暴力的做法,枚举一条出边枚举一条入边,然后求出去的点到入点的最短路. 但是这样如果点\(1\)度数很多就会\(T\). 但是这种问题配最短路是很经典的套路,因为两个不同的数字至少有一个…
A positive integer xx is called a power of two if it can be represented as x=2y, where y is a non-negative integer. So, the powers of two are 1,2,4,8,16,… You are given two positive integers nn and k. Your task is to represent nn as the sumof exactly…
在培养皿中,每个细胞每天会繁殖,数量*2 我们可以在任意天加入任意数量的细胞入培养皿中. 想要知道最少加入多少个细胞,可以使得有一天,培养皿中细胞的数量会恰好为x 其实就是输出X的二进制中有多少个1 Sample test(s)input5output2input8output1 # include <iostream> # include <cstdio> # include <cstring> # include <algorithm> # includ…
A. Raising Bacteria time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are a lover of bacteria. You want to raise some bacteria in a box. Initially, the box is empty. Each morning, you can…
All Your Paths are Different Lengths 题目链接:https://atcoder.jp/contests/arc102/tasks/arc102_b 题解: 构造题有技巧,如果题目中要求了20和60,那就从这里入手好了. 发现没法入手因为太平凡了.... 但是,他要求了每种值只出现了一次,容易联想到弄出来$log$个$2$的幂次. 诶?想到这里发现,$20$好像差不多就是$log$大小. 我们就放$20$个点,第$i$个点指向第$i + 1$个点两条边,$2^{…
Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18190    Accepted Submission(s): 5080 Problem Description Marsha and Bill own a collection of marbles. They want to split the collection…
V3其实和dp关系不大,思想挂标题上了,丑陋的代码不想放了.…
A positive integer xx is called a power of two if it can be represented as x=2yx=2y, where yy is a non-negative integer. So, the powers of two are 1,2,4,8,16,-1,2,4,8,16,-. You are given two positive integers nn and kk. Your task is to represent nn a…
文章结构: 一.所遇到的问题 二.解决方法 一. 服务器端通过websocket向浏览器端传输图片(二进制),需要根据不同的图片把图片显示在不同的位置,可行的一个方法是先把图片转化成二进制数组,再把二进制数组和一个字节的图片标识拼接在一块传输给浏览器端,最后在浏览器端拆分.找了好久才找到一些js处理二进制的相关方法,就在此记录一下. 二. 1.服务器端二进制拼接: public byte[] mergeByte(byte[] b1,byte[] b2) { byte[] b3=new byte[…
写在前面:我是一只蒟蒻~~~ 今天我们要讲讲动态规划中~~最最最最最~~~~简单~~的背包问题 1. 首先,我们先介绍一下  01背包 大家先看一下这道01背包的问题  题目  有m件物品和一个容量为n的背包.第i件物品的大小是w[i],价值是k[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大.    题目分析:我们刚刚看到这个题目时,有的人可能会第一想到贪心,但是经过实际操作后你会很~~神奇~~的发现,贪心并不能很好的解决这道题(没错,本蒟蒻就是这么错出来的)…
BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\(x,y\),\(x\)子树所有边全指向\(a\),\(a\)与\(y\)子树之间的边全指向\(y\).这样答案就是\(sz[x]\times sz[y]\),要让\(sz[x],sz[y]\)尽量相等.找重心就好了. 然后DP,求划分重心两部分子树大小分别为\(x\)和\(n-1-x\)是否可行.…
多重背包, 要求 \(N\log N\) 复杂度 Solution 众所周和, \(1-N\) 之内的任何数可以由 \(2^{0}, 2^{1}, 2^{2} ... 2^{\log N}, N - 2^{\log N}\) 拼凑而成 我们知道一定有一种最优方案, 使得第 \(i\) 种物品只消耗 \(x\) 个 \((x <= n_{i})\) 而 \(x\) 可以被二进制凑出来 所以我们先二进制拆分物品件数, 再跑 \(01\) 背包即可 P1776 宝物筛选_NOI导刊2010提高(02)…