图论
没有ID的ID
这个作者很懒,什么都没留下…
展开
-
NOIP 模拟赛 染色
MZOJ先跑一遍KrusalKrusalKrusal,得出最小值,在考虑将矩形染色而由于矩形的个数很小,我们可以考虑用状压的方式0/10/10/1枚举当前这个矩形染还是不染色,然后再来跑KrusalKrusalKrusal或者PrimePrimePrime直接上代码:#include<bits/stdc++.h>#define rep(i,a,b) for(int (i)=(...原创 2019-11-06 15:10:32 · 155 阅读 · 0 评论 -
340. 通信线路
AcWing算法:spfa的分层图和拯救大兵瑞恩差不多(我的另一篇分层图的博客)dis[u][i]dis[u][i]dis[u][i]表示到uuu这个节点已经用了iii次免费机会了可以考虑动归的思考方式(vvv是uuu的下一个点)如果这条路不免费dis[v][i]=max(dis[u][i],e[i].w)dis[v][i]=max(dis[u][i],e[i].w)dis[v][i]...原创 2019-10-27 20:56:06 · 125 阅读 · 0 评论 -
P1351 联合权值
传送门(洛谷)一道树上操作题分两种情况操作,设当前节点为uuu,儿子为vvv,父亲为fafafavvv与fafafa可以组成一对联合权值,也就是一条链的情况vvv与uuu的其他儿子可以组成一对联合权值用一个tottottot数组存储uuu除去vvv的其他儿子的权值,再用乘法分配律乘起来就行,即ans2=tot∗w[v]ans2=tot*w[v]ans2=tot∗w[v]。Code...原创 2019-10-24 17:40:14 · 132 阅读 · 0 评论 -
Balancing Act
题目 Balancing Act找树的重心树重心的性质:一颗树一定有一个重心。当且仅当图的节点数n为偶数且有一条边连接两个大小均为n/2n/2n/2的子树时,树有两个重心,即是这条边的两个端点。每个子树大小都不大于n/2n/2n/2重心到所有点的距离和最小维护两个数组:size,fsize,fsize,f,一个是存储节点个数,一个维护父亲节点如果当前这个节点的节点数大于2n\f...原创 2019-10-24 11:22:04 · 210 阅读 · 0 评论 -
P1772 [ZJOI2006]物流运输
传送门(洛谷)算法:最短路与动态规划结合c1[id][j]c1[id][j]c1[id][j]表示ididid号港口在jjj天的时候是否是正常运行co[i][j]co[i][j]co[i][j]表示从iii到jjj天走同一条路线的最小花费f[i]f[i]f[i]表示前iii天的最小花费转移方程:f[i]=min(f[i],f[j]+co[j+1][i]∗(i−j)+delta)f...原创 2019-10-15 11:24:39 · 227 阅读 · 0 评论 -
P2024 [NOI2001]食物链
传送门(洛谷)此题和 \;\;P1525 关押罪犯 \;\;差不多,都是维护一个自己的反面。我们开一个三倍的并查集xxx表示它自己x+nx+nx+n表示它的天敌x+2∗nx+2*nx+2∗n表示它的食物如果x,x+2∗n,x+nx,x+2*n,x+nx,x+2∗n,x+n任意两个在一个集合中都是不合法情况#include<bits/stdc++.h>#defi...原创 2019-10-08 21:41:48 · 89 阅读 · 1 评论 -
Day2
P1525 关押罪犯贪心+并查集维护先进性排序,将怨气值最大的一对拆开,分别找出每一个人的“死敌”,然后和自己的“死敌”分离开(用并查集维护就可以),最后只需要找出第一个两个人必须在一个监狱的情况(也就是在同一个并查集中),就是最后的答案。举个例子:先贪心按照权值大小进行排序,在枚举到两个人u,vu,vu,v时u,vu,vu,v对应的死敌分别是u′,v′u',v'u′,v′。则u,v′u...原创 2019-10-08 19:43:42 · 81 阅读 · 0 评论 -
P1991 无线通讯网
传送门(洛谷)此题…很水数据范围很小,我们把每一个点到其他点的距离算出来后就跑一遍KrusalKrusalKrusal,随便记录下每次加边的加的边的权值,然后由于要给某些哨兵所开bugbugbug,所以我们就给最大加边的两个哨所开bugbugbug就好了#include<bits/stdc++.h>#define ll long long#define rep(i,a,b) ...原创 2019-09-27 17:04:04 · 82 阅读 · 0 评论 -
P2661 信息传递
传送门(洛谷)并查集求最小环对于两个点A,BA,BA,B,如果A指向BA指向BA指向B,则将A,BA,BA,B两点连一条边,且将两点放入一个集合中,更新权值,每条边的初始权值就是1,就是步数inline int find(int x) { if(fa[x]!=x) { int last=fa[x]; fa[x]=find(fa[x]); dis[x]+=dis[last]; ...原创 2019-09-27 15:45:53 · 78 阅读 · 0 评论 -
NOIP 模拟题 行动!行动!
MZOJ分层图,考虑两个变量dis[u][k]dis[u][k]dis[u][k]走到了uuu号点用了kkk个血包丢掉的最小的生命由于受NOI2018NOI2018NOI2018的影响此题也卡住了SpfaSpfaSpfa三组,故考虑DijkstraDijkstraDijkstraCode#include<bits/stdc++.h>#include<queue>...原创 2019-09-04 20:51:28 · 148 阅读 · 0 评论 -
#10076. 「一本通 3.2 练习 2」Roadblocks
传送门题意很明确:找到第二短路考虑Dijkstra和SpfaDijkstra和SpfaDijkstra和Spfa算法,维护两个标记dis1[u]dis1[u]dis1[u]和dis2[u]dis2[u]dis2[u],dis1[u]dis1[u]dis1[u]表示最短路dis2[u]dis2[u]dis2[u]表示第二短路Dijkstra算法Dijkstra算法Dijkstra算法#in...原创 2019-09-04 19:52:18 · 228 阅读 · 0 评论 -
FFF团
MZOJ【题目描述】从前,Shylock和Lucar 幸福的生活在一起。在情人节前夕,他们出去逛街,遇到了FFF团的成员集体活动,于是他们就被FFF团抓进了地牢,并把他们关进了随机的两个不同的房间里。FFF团的团长打算明天将他们淹没在火海之中。但是团长给了他们一个机会,如果他们其中一个人能到达另一个人的房间(另一个人不动),那么就放过他们,否则就关到第二天然后点火。地牢里面有n个房间,m条...原创 2019-08-31 20:01:39 · 821 阅读 · 0 评论 -
P3906 Geodetic集合
传送门(洛谷)数据范围:n<=40,故先用floydfloydfloyd跑一遍,然后遍历每一个点(相当于一个中转点),如果起点到这个中转点的距离加上中转点到终点的距离和等于起点到终点的距离,则这个点就是GeodeticGeodeticGeodetic集合的一个元素#include<bits/stdc++.h>#define rep(i,a,b) for(register i...原创 2019-08-18 21:08:05 · 151 阅读 · 0 评论 -
#10064. 「一本通 3.1 例 1」黑暗城堡
传送门先跑一遍最短路(spfa和djkstra均可spfa和djkstra均可spfa和djkstra均可)单个人推荐djkstra,毕竟spfa死过一回了在跑djkstradjkstradjkstra的时候加上堆优化(找最小边),如果不会最小生成树出门左转百度,再用prim求出生成树,最后用乘法原理乘一遍就好#include<bits/stdc++.h>#include<...原创 2019-07-29 21:55:42 · 253 阅读 · 0 评论 -
最短路计数
坑害我良久的一道比较水的spfa题(传送门洛谷)附上题目(测试数据自己看)给出一个N个顶点M条边的无向无权图,顶点编号为1−N。问从顶点1开始,到其他每个点的最短路有几条。这个题可以忽略重边(大不了自己走到自己再加上一条边)。以起点1号点出发,一遍spfa找出所有的dis值,开一个ans数组存答案。如找到更小的进行松弛,更新,并且它的ans这与它的前驱节点相同。再将v的前驱节点入队再找它前...原创 2019-01-21 17:50:39 · 251 阅读 · 0 评论