题目表述 给你一个下标从 0 开始的二维整数数组 grid ,数组大小为 m x n 。每个单元格都是两个值之一: 0 表示一个 空 单元格, 1 表示一个可以移除的 障碍物 。 你可以向上、下、左、右移动,从一个空单元格移动到另一个空单元格。 现在你需要从左上角 (0, 0) 移动到右下角 (m - 1,
X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? 已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量
本设计: 基于STM32智能窗帘设计(含源程序+proteus仿真) 仿真:proteus8.11 程序编译器:keil 5 编程语言:C语言 编号C0007 资料下载链接 更多设计 功能说明: 有手动,自动两种模式: 1.自动模式:滑动变阻器模拟光照传感器,通过stm32检测与阈值比较 低于阈值开窗帘,高于阈值关闭窗帘; 2.手动模式:按键
OO第三单元总结 架构设计 本单元主要任务为阅读JML的属性和方法规格,来模拟一个社交网络模型,通过三次迭代,实现简单社交关系的模拟和查询、群组和消息功能以及社交关系系统中不同消息类型和操作。 由于是在JML规格的基础上编写代码,架构设计基本仿照代码模板进行设计,相比前两单元较
洛谷题面 \(\rm update:\) 添加了代码。 题目大意 给你一个 \(n\) 个点,\(m\) 条边的无向图,每条边连接点 \(u, v\),并且有个长度 \(w\)。 有 \(q\) 次询问,每次询问给你一对 \(t, x\),表示仅当前询问下,将 \(t\) 这条边的长度修改为 \(x\),请你输出当前 \(1\) 到 \(n\) 的最短路长度。
Prim O(mlogm) memset(dis, 80, sizeof(dis)); q.push({ 1,0 }); dis[1] = 0; while (!q.empty()) { int u = q.top().s; q.pop(); if (vis[u])continue; vis[u] = true, ++num, ans += dis[u]; for (int i
AtCoder Beginner Contest 252 E - Road Reduction https://atcoder.jp/contests/abc252/editorial/4005 可以证明,总可以构建出一个生成树,使某一点到其余点的距离,等于原图中某一点到其余点的最小距离。 证明方法为,每次保留最小距离路径的最后一条边。 故可以使用dijkstra算法直接
y总做法:建立一个虚拟原点,到所有物品的距离为物品原本价值,物品之间的价值为交易价值,枚举等级范围跑最短路即可 我的做法:以女儿为原点反向建图,物品之间的距离为交易价值,到每个物品的最短路加上这个物品的原本价值即为总花费,取最小 时间复杂度均为O(n^2*logn)(dij堆优化) #inclu
题面 Description: 给定一个 \(n(1\leq n\leq2\times10^5)\) 个点的无向图 \(G\) 和数组 \(a\),对于每个 \(i(1\leq i\leq n)\),求出 \(\min_{j=1}^n(2\times\operatorname{dis}(i,j)+a_j)\)。 因为题目把所有路径长度乘了个 \(2\),所以下文的讲述中默认将边权 \(\times2\)。 如果我
1162. 地图分析 你现在手里有一份大小为 n x n 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地。 请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的,并返回该距离。如果网格上只有陆地或者海洋,请返回 -1
link 一道典型的早期OI题目:数据范围小,技巧性不强,代码简短,考察的知识点比较初级,但客观上来说仍然具有一定的思维难度。 对于这道题来说,读懂题是关键。题目是说假如给定一张无向图,图上一些节点在某个时间段内无法使用,且知道每次改变路径都会付出一定代价,询问总花费最小值。 显然可以
分治 P6932 [ICPC2017 WF]Money for Nothing gym 101471d P4183 [USACO18JAN]Cow at Large P 题目大意 给定 \(n\) 个点一棵树,奶牛 \(Bessie\) 在树上的一个点上,初始时每个叶子结点可以放一个 \(FJ\) 也可以不放,每一时刻, \(Bessie\) 和 \(FJ\) 可以同时向相邻的一个点走去,任意时刻
1 按数值从小到大输出 priority_queue<int,vector<int>,greater<int> >q; //可理解为值越来越大 2 按数值从大到小输出 priority_queue<int,vector<int>,less<int> >q; //可理解为值越来越小 3 默认值 相当于less priority_queue<int>q; 4.数据类型为结构体 自定义排序函
P6348 [PA2011]Journeys 题目描述 一个星球上有 n 个国家和许多双向道路,国家用 \(1\sim n\) 编号。 但是道路实在太多了,不能用通常的方法表示。于是我们以如下方式表示道路:\((a,b),(c,d)\)表示,对于任意两个国家 \(x,y\),如果 \(a\le x\le b,c\le y\le d\),那么在 \(x,y\) 之间有一条
差点又因为文件暴0。。。 A. matrix 状压,\(f[i][j][k]\)表示第\(i-1\)行状态为\(j\),第\(i\)行状态为\(k\)的最小花费。 貌似复杂度不对?但是舍弃非法状态后复杂度是可以接受的,具体怎么证明我不会 code #include<cstdio> #include<cstring> using namespace std; int min(int x,in
本博客涉及代码可在GitHub下载:传送门 K均值聚类 K均值聚类是常用的欧式距离聚类算法,即认为两个目标向量的差的模长越小,两个目标越可能是一类的。 通俗理解:牧师-村民模型 有四个牧师去郊区布道,一开始牧师们随意选了几个布道点,并且把这几个布道点的情况公告给了郊区所有的村民,于是
做这题犯了好多 nt 的事,在朋友圈发完牢骚了! 记录一下这题的神仙状态设计吧qwq。 讲一下我的心路历程: 一开始:回路?搜索?不可能吧,这是蓝题啊( 经过思考:嗯这大概貌似是个 dp 吧,好像 LIS 的做法?变成两个人的相遇问题。但是很快我发现写不出来。 后来,经过某书的悉心指导,终于体悟了这道题对
没有好办法就暴力,没有好办法就模拟。 #include<iostream> using namespace std; struct node { int dis; bool dir;//1是向右 0是向左 } p[1005]; int num[1005];//用来记录每个位置有几个球 int sign[1005];//用来标志是否需要反向 int main() { int n,t,l; c
220510总结 从此加入快读大军乐 inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch
先用迪杰斯特拉剪枝,再dfs确定最佳方案 #include<bits/stdc++.h> using namespace std; typedef pair<int,int> pii; const int N = 4010,INF = 0x3f3f3f3f; int n,m,c,t; int nums[N]; int head[N],dis[N],vis[N],cnt; int send=INF,bring=INF; struct BIAN{ int to,next
题目: LeetCode 743. 网络延迟时间。给定无负边图,求信号从某一源点散播到所有点的最短时间。 分析: 单源最短路问题,这里用Dijkstra算法实现。有几个注意点:优先队列调用的>需要用友元函数,参数为const xx&;优先队列波认为大根堆。另外这里选用链式前向星存图。 代码: const int MAXE
前置知识:点分治 点分治,是处理树上路径的一个极好的方法。 如果你需要大规模地处理一些树上路径的问题是,点分治是一个不错的选择。 具体思路 P3806 【模板】点分治 给定一棵有 \(n\) 个点的树,询问树上距离为 \(k\) 的点对是否存在。 大多数同学的暴力做法都是对于每一个点对 \((u
洛谷题面传送门 套路题一道。 首先直接抛出建图方式: 边化点,点转边。将每一条无向边 \(e=(u,v,w)\) 拆成一正一反两条有向边 \(e_1,e_2\),然后在 \(e_1,e_2\) 之间连权值为 \(w\) 的边。 对于每个点,将所有与其相连的边按权值从小到大排序,然后对于权值相邻的两条边 \((e_1,w_1),(
题目链接 https://www.luogu.com.cn/problem/P1144 第一道绿题。。 本是想找几个最短路径做一下,然后去看了看lqs的博客,发现有这么个题(https://www.cnblogs.com/LQS-blog/p/16206505.html),他说:“当然,这类题也可以用dijkstra来处理,不过既然有了最优选择,何必去选择多余的呢,是吧”,欸我
求最长路,可以用spfa做, 数组要开到1e6,否则会超时 #include <iostream> #include <queue> #include <cstring> using namespace std; const int N = 1e6 + 10; const int INF = 0x3f3f3f3f; #define x first #define y second int ne[N], e[N], w[N], h[N], idx, in[N]; type