2019湘潭校赛 G(并查集)】的更多相关文章

要点 题目传送 题目本质是每个点必属于两个集合中的一个,伴随的性质是:如果一个人说别人true,则他们一定属于同一阵营:如果说别人fake,一定不属于同一阵营. 每个点拆为\(i\)和\(i + n\)分别代表他属于某种阵营(目前还不确定),然后根据上述性质边读入边合并同类. 这样扫一遍,如果某个\(i\)和\(i + n\)属于同一阵营则矛盾,无解. 若有解,对于每个点扫一遍和他同阵营的人,为了使fakeman尽可能地少,\(<=n\)的人少就把\(<=n\)视为fakeman:否则把\(&…
题目传送 dp是常规的:\(m^2\)的预处理:把位置存进vector然后\(O(1)\)算出想要的:WA点:要注意特意设置一下val[i][v.size()]=0,即全天都放鸽子则花费时间为0. #include <bits/stdc++.h> using namespace std; int T, n, m, d, ans; int val[205][205], dp[205][205]; char s[205]; int main() { for (scanf("%d"…
题目传送 思路是始终维护西瓜数量的区间,即L代表目前可以达到的最少的,R是最多的,然后判断一下. #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5; int T, n, m, a[maxn]; int main() { for (scanf("%d", &T); T; T--) { int maxx = 0, lila = 0; scanf("%d %d"…
对于某个靴子,如果0代表某个格能走,1代表不能走,那么只要连续的1的个数的最大值>=靴子的步长,那这个靴子就不能用. 那么只要对靴子和格子都按深度排个序,然后从大到小来扫一遍(靴子越来越浅,能走的格子就越来越少,也就是相当于在增加1的个数),现在只要能维护把0变成1后,连续的1个数的最大值就行了 用并查集就可以了(好像双向链表或者线段树也行?). #include<bits/stdc++.h> #define ll long long #define pa pair<int,int…
题意:\(\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\frac{\phi(i)*\phi(j^2)*\phi(k^3)}{\phi(i)*\phi(j)*\phi(k)}\phi(gcd(i,j,k))\),1e4组询问,每次给\(n(1<=n<=1e7)\). 题解:由\(\phi(x)\)的性质\(x=p_1^{k_1}*p_2^{k_2}*...*p_n^{k_n}\),\(\phi(x)=p_1^{k_1-1}*(p_1-1)*p_2^{k_2-1}*(p…
题目传送门 题意:每天能往存钱罐加任意实数的钱,每天不能多于起那一天放的钱数.如果某一天的钱数恰好等于那天的特价商品,则可以买,求最后的最大快乐值. 思路:先来一段来自出题人的题解: 显然的贪心:如果第$i$天买完,准备在第$j$天买,那么显然最优是在$i+1$到j天放$wi/(j-i)$的钱. 于是假定选择的物品是$k1,k2,k3… $那么必须满足: $a[ki]/(ki-ki-1)<=a[ki-1]/(ki-1-ki-2)$ 令$f[i][j]$表示最后购买的两个物品为i和j,则$f[i]…
G - 飞花的传送门 飞花壕最近手头比较宽裕,所以想买两个传送门来代步(夏天太热,实在是懒得走路).平面上有N个传送门,飞花壕想要挑两个距离最远的传送门带回家(距离为欧几里得距离,即两点之间直线距离). 请你帮他算一算他所挑选的最远的两个传送门有多远. Input 多组输入. 对于每组输入,第一行输入一个整数N(2 <= N<= 50000),接下来从第2行到第N+1行,每行两个整数(Xi,Yi),代表第i个传送门的坐标(-1000000 <= Xi , Yi <= 1000000…
Jug Hard Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1172 Solved: 180 Description You have two empty jugs and tap that may be used to fill a jug. When filling a jug from the tap, you can only fill it completely (i.e., you cannot partially fill it…
一丢丢思维就ok 题目大意: 魔法师要煮药,有n个等级的药,所需要的药物为a1,a2...an,意为第n级需要多少药物,下一行为库存的不同等级药物,药物可降级使用不可升级. 思路:从高级药物开始解,把没用完的药物存起来放到下一及使用. 代码如下: #include <iostream> #include <string.h> using namespace std; ],b[],all,flag(); long long sum; int main(){ cin>>t;…
毒瘤出题人,坑了我们好久,从基本的素数筛选,到埃氏筛法,到随机数快速素数判定,到费马小定理,好好的水题做成了数论题. 结果答案是 2*n=n+3*n,特判1,2. 以下为毒瘤题目: 题目大意: 输入一个数n, 输出两个合数(即非素数)a,b 实现 n+a=b 解题思路 3n=n+2n; 特判1.2 代码: #include<iostream> #include<stdio.h> using namespace std; typedef long long ll; int T; ll…