http://codeforces.com/gym/100792/problem/K在普通拓扑基础上要求字典序最小 被压在最底下的元素最难满足 所以逆向考虑#include <bits/stdc++.h>using namespace std;const int maxn=2e5+10;const int maxm=4e5+10;struct node1{ int v,n
http://codeforces.com/gym/100792/problem/G两点之间距离在此处为设两点(x1,y1) (x2,y2) x=abs(x2-x1) y=abs(y2-y1) max=max(x,y) min=min(x,y)则dis=sqrt(2)*min+max-min=max+(sqrt(2)-1)*min题目就是求两点之间最远距离 一般这种问题都是转换为求曼哈顿最
#include <bits/stdc++.h> using namespace std; struct node { node *next[26...
#include <bits/stdc++.h> using namespace std; #define ll long long #define pil pair <int,ll> map &l...
vector <...
在UVAlive上死活...
http://codeforces.com/gym/101889/attachments给一个图 q次询问 在某条边必选的条件下求一个最小生成树先求个生成树 因为每次只固定一条边 可以求个lca 看替换形成的圈上的哪条边最合适对一个最小生成树后 如果用两点之间的非树边替换一条树边构成新的生成树 肯定不是最优的(排除相等) 所以在只替换一条边的情况下只考虑圈内边即可 #inclu
#include <cstdio> #include <stack> #include <cstring> #include <a...
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=0x3f3f3f3f; struct node { int v; i...
#include<bits/stdc++.h> using namespace std; #define ll long long struct node { ll l...
https://hihocoder.com/login #include <bits/stdc++.h> using namespace std; struct node1 { int v; int next; }; struct node2 { int x; int y; int dis; }; map <string,in...
否则 先求个生成树(森林) 用剩下的边判奇圈 即两点...
比赛时没时间写 最后四十分钟看到这个题 最后不到半小时有思路 明知道自己可以做出来但已经没有时间 明知道写不完...
比赛就掉了一句j++ 攒人品吧 #include<bits/stdc++.h> using namespace std; vector <int> edge[1...
#include <bits/stdc++.h> using namespace std; struct node { i...
https://www.51nod.com/onlineJudge/submitDetail.html#!judgeId=635476两个点之间若只有一条不相交路径 说明该路径上有桥 说明两个点在不同的边双连通分量中#include <cstdio>#include <cstring>#include <algorithm>using namespace
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1060反素数https://baike.baidu.com/item/反素数/8005979?fr=aladdin题目等价于求1-n内最大的反素数 由其两个性质 可以直接爆搜 还有注意细节处理 判断当前值乘某个素因子是否符合条件时 要两边同除该素因子 否则
遍历多余点 看能否松驰树上两点距离#include <bits/...
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1093既然要设立中转点 那每个点被经过的次数肯定是单增的 且一定时奇数 因为最后一趟没有回程然后就想不动了。。其实还可以停在非整数点其实就是逆向递推 不断将问题转换 #include <bits/stdc++.h>using namespac
http://codeforces.com/problemset/problem/922/Cn对1到k取余 问能否得到k个不同的数n%1==0 => n%2==1 => n%3==2 => ... => n%k==k-1n=2*a-1=3*b-1= ... =k*z-1即判断n+1是否为1到k的lcm的倍数 lcm接近指数增长 超过n直接输出no#include &
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1391一开始只想到线段树这种办法 真的智障后来发现 化0为-1后 相邻前缀后缀只差1 所以对前缀只关心值大一的位置 对后缀只关心值小一的#include <bits/stdc++.h>using namespace std;const int
https://www.51nod.c
http://codeforces.com/problemset/problem/633/G给一个模数mod(<=1000) 两种操作一是区间加值 二是查询区间有多少种取模后的素数最暴力的想法就是对每个节点开一个1000大的数组 查询就看素数位置有多少是1 然后修改时把数组循环x次 肯定不行但这正好是bitset的功能啊 把1000的数组换成bitset 修改时移位操作如下 bit[
http://codeforces.com/contest/939/problem/D每次可以找一个字母对 (c1,c1) 以后这两个字符就可以随便相互转换 用最少的对数将两个字符串变得一样 且这些转换具有传递性其实可以看做一个最小生成树 如果两字符串对应位置不相等 就当作在图上 有两个字符对应的点 两点之间有一条边 因为有传递性 所以我们要的就是用最小代价将图连通#include <
http://codeforces.com/problemset/problem/230/D在普通最短路的基础上 每个点在一些时间点是无法到达的 看了题解才懂。。松驰每个点时 看一下该点在当前用来松弛的这个时间点能否到达 能就直接松驰 不能就找一个最近的合法时间 这样对于每个点 相当于来的时间段不同 则边的权值不同 预处理二分即可#include <bits/stdc++.h>
http://codeforces.com/contest/918/problem/C借鉴的很巧妙的方法普通括号匹配开一个变量就够 但是这里有问号 随便决定它的朝向肯定不对 可以将还剩多少左括号这个具体值变为一个值域 详见注释#include <bits/stdc++.h>using namespace std;int n;char ch[5010];int main(){
http://codeforces.com/contest/1036/problem/E卡B题时间太长 E没来及写。。因为都是整数点 所以线段上的整数点数量就是横坐标之差与纵坐标之差的gcd+1然后就是去重 n^2的求出所有交点 map去重#include <bits/stdc++.h>using namespace std;#define ll long long#defin
http://codeforces.com/problemset/problem/798/D存结构体 对a排序 然后两个两个的选 选i和i+1中b值大的 这样保证了大于b的一半 又因为选 n/2+1(向下取整)多出来的肯定先把a中最大的选了 至于为什么可以考虑最怀情况 即二选一时被选的下标在a中总是对应小值 但如果先把a中最大的一个或两个选掉 就变成二选一总选最大的了 即[小大][小大].
https://www.lydsy.com/JudgeOnline/problem.php?id=3124第一问求树的直径 第二问求有多少边被所有直径覆盖求第一问时把直径上的点存下来 枚举直径上的点 求一下不走直径上的点所能到达的最远距离 记为dis3 如果和直径的左端点距离相等 就把当前点到左端点的边都标记 这些边就是不符合条件的 和直径的右端点距离相等同样处理要求的边时被所有
http://codeforces.com/contest/584/problem/D歌德巴赫猜想:任一大于2的偶数都可写成两个质数之和 任一大于7的奇数都可写成三个素数之和小常识:10^9范围内 相邻两个素数差不超过300#include <bits/stdc++.h>using namespace std;bool judge(int n){ int i;
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号