A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_back using namespace std; typedef long long ll; typedef unsigned long long ull; const ll LLmaxn = 2e18; int main() { string a; cin >> a; , c=; ; i <…
思路: 贪心+并查集 因为45‘,所以可以很方便的算出每个仙人掌的最晚起跳(左端点) 右端点自然也能出来 先按左端点排序 如果他右面的和他相交,就更新 用并查集维护这个更新的关系 更新的同时维护高就好了 代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define rii register int i #define rij register int…
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1598 一道带有贪心思想的并查集 所以说像二分,贪心这类基础的要掌握的很扎实才行. 用结构体数组储存公路编号和速度,然后按照速度从小到大的排序, 然后以每条路为起点枚举(已经排了序,所以可以保证可以取最小的),再利用并查集判断是否走到 最后比较出最小的差值 code #include<cstdio> #include<algorithm> using namespace std; ;…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1198 题目大意: 有如上图11种土地块,块中的绿色线条为土地块中修好的水渠,现在一片土地由上述的各种土地块组成,需要浇水,问需要打多少口井. 例如下面这个土地块 ADC FJKIHE then the water pipes are distributed like 解题思路: 首先模拟A-K的四个不同的方向,用了一个数组表示从A-K的四个方向是否有水管 然后枚举每个点的四个方向上可到达的地方,如…
题意: 有 n个不同的糖果,从 1到 n编号.有 k个客人.要用糖果招待客人.对于每个客人,这些糖果中恰有两个是其最爱.第 i个客人最爱的糖果编号是 xi和 y.将 k 个客人任意排列,他们按顺序去拿自己最爱的糖果.客人要拿到至少一个最爱的糖果才满意.求不满意的客人的最小数目. 题解: 题目让求不满意客人最小数量,那么就肯定会有这样情况发生: 3 3 1 2 1 3 1 3 刚开始1号客人喜欢1和2糖果,因为1和2号糖果都没被用过,那么我们就先把1号糖果分给1号客人,后面第二个客人喜欢1和3号糖…
用线段树维护每一块左右两侧的并查集, 同色合并时若不连通则连通块数-1, 否则不变 #include <iostream> #include <algorithm> #include <cstdio> #include <math.h> #include <set> #include <map> #include <queue> #include <string> #include <string.h&g…
Vova promised himself that he would never play computer games... But recently Firestorm - a well-known game developing company - published their newest game, World of Farcraft, and it became really popular. Of course, Vova started playing it. Now he…
https://www.luogu.org/problemnew/show/P4997 首先是改变气的定义,使得容易计算,这个很好理解. 然后使用并查集,因为要维护整个连通块的性质. 最后的难点在于,落子把同颜色的连通块连接了,但假如本身就是同一个连通块则不应该计数,所以其实连通块的气不应该手动维护,而应该全权交给并查集去处理. 当然去重之后也是对的. #include<bits/stdc++.h> using namespace std; typedef unsigned long long…
大意: 给定树, 边权为黑或白, 求所有有向路径条数, 满足每走过一条黑边后不会走白边. 这题比赛的时候想了个假算法, 还没发现..... 显然所求的路径要么全黑, 要么全白, 要么先全白后全黑, 所以可以用并查集将相邻同色边合并即可. #include <iostream> #include <random> #include <algorithm> #include <cstdio> #include <math.h> #include &l…
题意:给你一张无向图,无向图中每条边有颜色.有两种操作,一种是询问从x到y是否有双彩虹路,一种是在x到y之间添加一条颜色为z的边.双彩虹路是指:如果给这条路径的点编号,那么第i个点和第i - 1个点相连的边与第i个点和第i + 1个点相连的边颜色一样,其中i是偶数. 思路:这个问题相当于初了最后一步没有限制以外(最后一步只走一条边),每一步都要走颜色相同的两条边.我们先不考虑最后一步的问题,只考虑每一步都要走颜色相同的两条边,那么我们只需要扫描每一个点的出边,如果有两条边颜色相同,就在一张新图上…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3367 求一个无向图上权值最大的伪森林. 伪森林:一个图的连通子图,当且仅当这个子图有且仅有一个环. 既然是一个图的连通子图,那这个图本身就是连通的就没有疑问了,我们就可以贪心地找尽可能大的边,把他们并在一起,在并的时候,用pre来维护他们的祖先,额外开一个circle维护一条边是否在一个环内.好像生成树啊…是不是可以求最大生成树再加上一条最大边呢? /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓…
传送门 给n个点, 初始有m条边, q个操作. 每个操作有两种, 1是询问点x所在的连通块内的最长路径, 就是树的直径. 2是将x, y所在的两个连通块连接起来,并且要合并之后的树的直径最小,如果属于同一个连通块就忽视这个操作. 先dfs出每个连通块的初始直径, 然后合并的话就是len[x] = max( (len[x]+1)/2+(len[y]+1)/2+1, max(len[x], len[y]));  然后搞一搞就好了. 一开始写bfs写挫了一直超时,  只好改成dfs...... #in…
本文链接:http://www.cnblogs.com/Ash-ly/p/5932712.html 题目链接:http://codeforces.com/problemset/problem/722/C 思路: 题目给的操作数从第 1 个到第 N 个数是删除原数组中的一个数, 那么反过来从后往前就是增加原数组中的一个数, 每增加一个值, 那么就有四种情况: 第一种和前后都不连续, 即自成一个集合; 第二种:和前面的数连续, 即和前一个数在一个集合; 第三种和之后一个数连续, 即和之后的一个数在一…
Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence S = {s1, s2, ..., sn} is called heapable if there exists a binary tree T with n nodes such that every node is labelled with exactly one element from the se…
题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述:     省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现请你编写程序,计算出全省畅通需要的最低成本. 输入:     测试输入包含若干测试用例.每个测试用例的第1行给出评估的道路条数 N.村庄数目M (N, M < =100 ):随后的…
#include <stdio.h> #include <algorithm> #define MAX 100000 #define LL long long #define unsigned U //using namespace std; ,T; +],next[MAX*+],n,q; void init(int n) { ;i<=n;i++) { fa[i]=i;next[i]=i+; } } int find(int x) { return fa[x]==x?x:(f…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3624 题意: 给你一个无向图,n个点,m条边. 有两种边,种类分别用0和1表示. 让你求一棵生成树,使得这棵树中恰好有k条0种类的边.输出每一条边的两端点和种类. 若无解,则输出"no solution". 题解: 让0和1分别作两种边的边权. 步骤: (1)先找出必须选的0边.(优先选1,最大生成树) (2)再将0边个数加至k. (3)补上1边. AC Code: #incl…
LINK:Numbers on the blackboard 看完题觉得很难. 想了一会发现有点水 又想了一下发现有点困难. 最终想到了 但是实现的时候 也很难. 先观察题目中的这个形式 使得前后两个数字变成x+2y. 那么一个数字的变成两倍的次数固定 除了左端点至少可以变化一次. 有些数字 可以变换多次 这取决于什么 容易考虑到右端点 先变化一次 如果>0显然 可以和其左边进行合并一下. 然后 可以变换更多次 然后从右到左考虑这个过程就发现是正确的了. 这样 我们得到了一个nm的做法. 容易发…
题目链接: https://codeforces.com/contest/1159/problem/D 题意: 构造一个长度为$n$的$01$串,最小特殊连续字串的长度为$k$ 也就是,存在最小的$k$,满足,有一个长度为$k$的连续字串没有出现过两次 数据范围: $1 \leq k \leq n \leq 100\,000$$(k \bmod 2) = (n \bmod 2)$ 分析: 典型的构造题,构造了一下午的错误题意,…
Codeforces 题面传送门 & 洛谷题面传送门 真·两天前刚做过这场的 I 题,今天模拟赛就考了这场的 H 题,我怕不是预言带师 提供一种奇怪的做法,来自于同机房神仙们,该做法不需要 Min-Max 容斥,也不用爆推组合数,只需要比较强的眼力的初中数学求解二元一次方程组知识. 期望题没往 Min-Max 容斥的方向去想,不愧是我(大雾 首先我们先考虑一些复杂度比较高的多项式复杂度做法.注意到对于任何一个局面而言,我们并不用关心 \(S\) 里究竟具体有哪些数,也不用关心牌堆中具体有哪些数字…
C. Pie or die Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/problem/C Description Volodya and Vlad play the following game. There are k pies at the cells of n  ×  m board. Each turn Volodya moves one pie to the neighbo…
D. Dreamoon and Sets   Dreamoon likes to play with sets, integers and .  is defined as the largest positive integer that divides both a and b. Let S be a set of exactly four distinct integers greater than 0. Define S to be of rank k if and only if fo…
题目链接:http://codeforces.com/contest/820/problem/C 题解:显然a<=b的规律很好找只要 例如a=2,b=5,只要这样排列就行abbbbbbabbbbbbabbbbbb.... 然后a>b的规律是 例如a=5,b=2,只要这样的排列就行abcdeeeabfghhhabcdeeeanfghhh..... 当然满足这些条件的话就可以求出大于r-l>T的结果(T=2*(a+b)) 显然if(a <= b) ans = a + 1; else a…
A. Laptops time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output One day Dima and Alex had an argument about the price and quality of laptops. Dima thinks that the more expensive a laptop is, the…
题目:Click here 题意:给定数列满足求f(n)mod(1e9+7). 分析:规律题,找规律,特别注意负数取mod. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; ; ; int x, y, n; ]; int main() { while( ~scanf…
<题目链接> 题目大意: 给定一个数n,代表有一个0~n-1的完全图,该图中所有边的边权为两端点的异或值,求这个图的MST的值. 解题分析: 数据较大,$10^{12}$个点的完全图,然后异或又暂时推不出什么性质,所以先起手Kruskal打一张小数据完全图的MST的表,发现规律其实还是蛮好找的. #include <bits/stdc++.h> using namespace std; ; int fa[N],cnt,ncase; struct Edge{ int u,v,w; b…
分析: 三个01组合只有八种情况: 000 s001 s010 0011 s100 s101 1110 s111 s 可以看出只有010,101是不稳定的.其他都是稳定的,且连续地出现了1或0,标记为s. 考虑连续的不稳定串的,例子: 11010100   s        s  110100    s    s    1100 只有两种情况,两个边界是不同(11和00)或者相同(11或者00). 前者中间的不稳定串的长度是2*k,且经过k次将变成11110000,而后者的不稳定串的长度是2*k…
题目链接: 点击我打开链接 题目大意: 给你 \(n,j\),再给出 \(m[0]\) 的坐标和\(a[0]-a[n-1]\) 的坐标. 让你输出 \(m[j]\) 的坐标,其中 \(m[i]\) 和 \(m[i-1]\) 关于 \(a[(i-1)\%n]\) 对称. 简明题解: \(j\) 最大为\(10^{18}\) ,所以只能打表找规律了. 把两个样例(即\(n==3\)时)的 \(m[1]-m[9]\) 都列出来,结果发现 \(m[0]和m[6],m[1]和m[7]...\)是相等的.…
题目传送门(内部题145) 输入格式 从$math.in$读入数据. 第一行两个数,为$n,q$.接下来$q$行每行一个数$m$,询问大小为$m$的$A$一共有多少个. 输出格式 输出答案到$math.out$. 共$q$行,每行一个数,表示方案数$\mod 10000019$. 样例 样例输入1: 3 3012 样例输出1: 022 样例输入2: 100 445506070 样例输出2: 2085406665757278443310 数据范围与提示 样例解释: 对于第一个样例,$P=\{1,2…
题意:现在有n个集合 每个集合大小为1 现在你可以把集合合并m次 每次会告诉你哪个集合合并 让你输出每次从不同的四个集合里各选出四个的组合方案 思路:我们可以想到用并查集模拟集合的合并 对于方案数 我们可以发现 其实就是合并之前的答案 减掉两个集合内的数的组合的方案数(详情理解代码) #include <bits/stdc++.h> using namespace std; const double pi = acos(-1.0); const int N = 1e6+7; const int…