自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

矮纸斜行闲作草

yc写字的地方

  • 博客(9)
  • 收藏
  • 关注

原创 食物链 POJ - 1182 (带权并查集)

题目链接这个题给的都是相对关系,不能够确定具体的某个动物属于哪个物种,因此有开三倍空间来处理的那样的思路做法①链接带权并查集就是用来处理相对关系的,所以也可以考虑用带权并查集来做。图中是三种动物的相对关系,x->y表示x吃y我们用数组v[i]表示i与父节点的相对关系:v[i]=1 表示i 吃 fa[ i ]v[i]=2 表示i 被fa[ i ]吃v[i]=0 表示i fa[ i ]是同类路径压缩时: v[x ]=(v[x]+v[ fa[x] ])%3合并和判断矛盾见代码#inc

2021-01-26 16:42:46 141

原创 How Many Answers Are Wrong HDU - 3038 (带权并查集)

题目链接题意:有M个数,不知道它们具体的值,但是知道某两个数之间(包括这两个数)的所有数之和,现在给出N个这样的区间和信息,需要判断有多少个这样的区间和与前边已知的区间和存在矛盾。思路:带权并查集,i 到 fa[i] 的权值定义为sum[i]: (i,fa[i] ]的区间和对于区间[l,r] 我们查询并查集中的[l,r]区间和步骤就为:l-=1r1=find( l ), r2=find( r )①当r1==r2 :比如图中1 3 的根节点都是4可以得到(l,r] = sum[l]-sum[r

2021-01-20 00:24:54 83

原创 P1197 [JSOI2008]星球大战 (并查集求连通块问题)

题目链接题意:给定顶点为n 边数为m的无向图,求出此时连通块数目,同时给出k次操作,每次删去一个顶点并求出删去后的连通块数目。(1<m<=2e5)思路:(总体思路是采取逆向思维,先把k个点删去,求连通块数目,然后按给出顺序的倒序把点加进去,加一个求一次连通块数目。 )用并查集维护连通块数目的步骤:建图,对直接相邻的顶点用并查集维护,最终有多少个集合(有多少个根节点)就有多少个连通块。用并查集维护连通块情况,一个根节点就代表有一个连通块。 随后加点,每加一个点,先让连通块数目+1 ,然后

2021-01-19 15:38:48 95

原创 P1892 [BOI2003]团伙 +食物链 POJ - 1182 (并查集+思维)

思路①:开数组enem[i]记录节点i的敌对节点,当再次输入i的敌对节点时就把他所在并查集的根节点和enem[i]并起来。#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn = 1e4+7;const int INF = 1e9+7;int n,m;int fa[maxn];int enem[maxn];//i的敌人是enem[i]int find(int x){ .

2021-01-18 19:28:15 120

原创 The Unique MST POJ - 1679 (非严格次小生成树)

题目链接题目大意:给定无向图,判断最小生成树是否唯一。思路:求非严格的最小生成树,如果代价等于最小生成树,说明最小生成树不唯一,反之唯一。非严格次小生成树求法:在求出最小生成树的基础上,枚举每一条没有加进MST里的边<i,j>,把他加进去得到一个环,再删去这个环原先的最长的边(即:MST中i到j路径上的最长边,通过树形dp 维护maxedge[i][j],记录mst中i j路径上最大边权值),替换之后得到的所有权值和中 最小的就是次小生成树了。(但是这样得到的是非严格的次小生成树,因为这

2021-01-17 23:14:12 129 1

原创 The Shortest Path in Nya Graph HDU - 4725 (建图+最短路)

题目链接题意:n个顶点,每个顶点属于某个层,x和x+1之间可以代价c相互到达,另有m条有向边连接特定节点。 求1到n的最短路。(1<=n,m<=1e5)思路:如果枚举每个层,每层又枚举每个点和上下层每个点建边的话,时间O(n²)。我们可以把每一层当成一个点,层顶点从n+2开始编号(如果从n+1开始的话第一层的层顶点往下就是第n号顶点了,需要判断一下),层顶点与该层每个顶点连一条代价为0的有向边(层顶点->普通顶点),然后把该层的普通顶点与上下相邻层顶点分别连一条代价为c的有向边。

2021-01-15 18:58:41 114

原创 Frogger POJ - 2253 +Heavy Transportation POJ - 1797(最短路变形floyd+dijkstra)

题目链接题意:坐标轴上给出了n个点的坐标,求顶点1 2之间的最短路。这里最短路的定义为:1到2的所有路径中,各路径最长边中的最小值。 (2<=n<=200)思路:传统意义上最短路是顶点路径的边权之和,这里改成边的最大值即可。用Floyd和dijkstra都可以做。思路见代码。#include<iostream>#include<algorithm>#include<cstdio>#include<stdlib.h>#include

2021-01-12 00:18:03 118

原创 Travelling HDU - 3001 (状压dp + 模拟三进制位运算)

题目链接题目大意:给定一个带边权的无向图,每个顶点最多访问两次,可以选择任意顶点作为出发点,问访问完所有顶点最小代价。 (1<=n<=10)思路:每个顶点最多两次,那就用三进制来表示某个顶点的访问状态,比如:0000012这个状态表示第1个点访问了2次,第二个点访问了1次,其余点没有访问 。令dp[15][maxn]为:到达i顶点 访问状态为j时的最短路的长度状态转移:dp[child][now]=min(dp[child][now],dp[fa][last]+g[fa][child]

2021-01-10 22:12:19 144

原创 Nightmare Ⅱ HDU - 3085 (双向bfs)

题目链接题意:在一个迷宫有两个ghost,每秒可以走2格并且可以穿墙,boy每秒可以走3格,girl每秒1格,每次是ghost先移动然后人移动,问boy和girl能否在遇到ghost之前碰面。如果可以输出最小秒数,否则输出-1思路:同时从M G开始bfs,bfs的轮数从1开始枚举,如果在某一轮他们相遇了,就说明搜到了。这个轮数就是最小的秒数每秒 M搜三层 ,G搜一层 。用曼哈顿距离判断某个点能否走。注意这里每次bfs时,要取出当前层搜到的所有节点来搜下一层,代码中用count记录#include

2021-01-07 21:04:55 127

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除