关闭

51Node 1499图

1499 图 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 收藏 关注 给一个无向图,你要将这些点分成A、B两个集合,使得满足A的导出子图是一个完全图,而B的导出子图是一个没有边的图。 但是事实上你不一定能够做到,所以你允许有错误。我们定义一个完美值为: 1.如果A中两点有边相连,则增加|i-j|的完美值。 2.如果B中两点无边相连,则增加|i-j|...
阅读(51) 评论(0)

优先队列优化的求最短路和次短路条数以及长度的模板

//无向图版本 struct Edge { int to; int w; }; struct node { int v; int dist; int mark; bool friend operator <(const node &a,const node &b) { if(a.dist!=b.dist)...
阅读(85) 评论(0)

并查集判断连通块个数

#include using namespace std; int pre[1050]; //保存节点的直接父节点//查找x的根节点 int find(int a){ if(pre[a]!=a) pre[a]=find(pre[a]);//路径压缩,本结点更新为根结点的子结点 return pre[a]; } /...
阅读(58) 评论(0)

无向图寻找是否存在长度为k的环

dfs遍历以每一个点为起点是否存在长度为k的环。dfs(now,last,step)中的now表示当前点,last表示上一个访问的点,step一个记录路径长度的计数器,s【i】记录从起点到i点的路径长度。如果某点被访问第二次,则说明出现环,判断当前路径长度和它第一次出现是的长度差是否等于K即可。int k; bool e[N][N];//(1,1)开始,双向建边 int s[N]; bool dfs...
阅读(67) 评论(0)

dfs序

dfs序可以把一棵树区间化,即可以求出每个节点的管辖区间。struct node { int to; ll val; }; vector G[N]; int L[N],R[N]; int n,m,ti; void addedge(int u,int v,ll w) { G[u].push_back((node){v,w}); G[v].push_back(...
阅读(145) 评论(0)

51Nod 1199 Money out of Thin Air(dfs序+线段树维护区间和)

一棵有N个节点的树,每个节点对应1个编号及1个权值,有2种不同的操作。 操作1:S x y z,表示如果编号为x的节点的权值 < y,则将节点x的权值加上z。(Single) 操作2:A x y z,表示如果编号为x的节点以及其所有子节点的权值平均值 < y,则将节点x及其所有子节点的权值加上z。(All) 给出树节点之间的关系,进行M次操作,问所有操作完成后,各个节点的权值为多少? 节点的...
阅读(144) 评论(0)

51Nod1463 找朋友(离线处理+树状数组维护区间最大值)

给定: 两个长度为n的数列A 、B 一个有m个元素的集合K 询问Q次 每次询问[l,r],输出区间内满足|Bi-Bj|∈K 的最大Ai+Aj数据约定: n,Q<=100000 m <= 10 0<=A[i]<=1000000000 1<=B[i]<=n 1<=K[i]<=n 保证B[i]互不相等 Input n Q m A1 A2 ….An B1 B2 ….Bn K1...
阅读(60) 评论(0)

大组合数取模模板

LL n,m,p = 1e9+7;LL quick_mod(LL a, LL b) { LL ans = 1; a %= p; while(b) { if(b & 1) { ans = ans * a % p; b--; } b >>= 1;...
阅读(102) 评论(0)

区间重叠的合并模板

struct Day { ll l,r; } day[N]; for(int i=1; i<n; i++) { if(day[i].l<=day[cnt].r+1) day[cnt].r=max(day[cnt].r,day[i].r); else { da...
阅读(69) 评论(0)

51Nod 1475 建设国家

小C现在想建设一个国家。这个国家中有一个首都,然后有若干个中间站,还有若干个城市。 现在小C想把国家建造成这样的形状:选若干(可以是0个)的中间站把他们连成一条直线,然后把首都(首都也是一个中间站)连在这一条直线的左端。然后每个点可以连一个城市,特别的是最右端的点可以连接两个城市。 现在有n个城市的规划供小C选择。但是,他们那儿的交通条件比较差,他们那儿一天是2*H个小时,每个城市里面的人每天都...
阅读(73) 评论(0)

2017百度之星资格赛 度度熊保护村庄

这题看似是一道凸包计算几何题,但其实是一道图论题。 考虑所有根据房子的位置确定士兵间的连边。暴力枚举任意两个士兵(i , j)组成的线段,如果所有房子都在给线段的右边,或者三点共线但不在线段的中间,则i向j连一条权值为1的边。最后跑一遍Floyd获取最小的环就可以了。#include //#define FIN freopen("input.txt","r",st...
阅读(146) 评论(3)

51Nod 1102 面积最大的矩形

1102 面积最大的矩形 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有一个正整数的数组,化为直方图,求此直方图包含的最大矩形面积。例如 2,1,5,6,2,3,对应的直方图如下:面积最大的矩形为5,6组成的宽度为2的矩形,面积为10。 Input 第1行:1个数N,表示数组的长度(0 <= N <= 50000) 第2 - N + 1...
阅读(82) 评论(0)

开根号向下取整代码实现

ll sqrt(ll x) { ll l = -1,r = 1e10,mid; while(r-l > 1) { mid = (l+r)>>1; if(mid*mid > x) r = mid; else if(mid*mid < x) l = mid; else...
阅读(83) 评论(0)

基尔霍夫矩阵计算欧拉回路

Matrix-Tree定理(Kirchhoff矩阵-树定理) *算法思想: *(1)G的度数矩阵D[G]是一个n*n的矩阵,并且满足:当i≠j时,dij=0;当i=j时,dij等于vi的度数; *(2)G的邻接矩阵A[G]是一个n*n的矩阵,并且满足:如果vi,vj之间有边直接相连,则aij=1,否则为0; *定义图G的Kirchhoff矩阵C[G]为C[G]=D[G]-A[G];...
阅读(52) 评论(0)

51Nod 1596 搬货物

思路:题目要求每次搬的货物的重量和必须是2的次方数,给出得数据也是2的次幂,显然,两个货物的重量和为2的次方数,当且仅当这两个货物的次幂相等,所以我们始终保持数组是升序的,当w[i]==w[i+1]时,去掉w[i],w[i+1]++后保留,否则去掉w[i],保留w[i+1],方案数+1。可以用优先队列优化。 但这题卡了输入,需要使用输入挂。。。。。。。#include #include...
阅读(73) 评论(0)
40条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:3587次
    • 积分:408
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:1篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论