首页 > TAG信息列表 > dis2

GYM100851 F - Froggy Ford(最短路铜牌题)

题意: ​ 现在有一条河,河中有n个石头,你需要从河的一端到河的另一端。现在你有一次机会在任意位置放置一个石头,请问石头放在哪里可以使过河的最长路径最短。请输出放置的石头坐标。 思路: ​ n的规模是\(1e3\),所以可以做到\(n^2\)的算法,我们把起点和终点也当做一块石头,基于贪心的思想

【题解】P1073 [NOIP2009 提高组] 最优贸易(图论,最短路,SPFA)

【题解】P1073 [NOIP2009 提高组] 最优贸易 此题妙哉! 虽然说这只是道绿题,但是还是卡了我好久,主要是这道题里面有两个思想我完全想不到。我太菜了 写一下思路来记录一下这道绝妙的题目吧。 题目链接 [NOIP2009 提高组] 最优贸易 - 洛谷 题意概述 有一张 \(n\) 个点 \(m\) 条边的图

Codeforeces 13B

Codeforeces 13B-Letter A 二维基础 题目链接:https://codeforces.com/problemset/problem/13/B 题意:给定三条线段,判断三条线段是否是“A”形的。“A”形的定义如下: 线段A和线段B有一个公共点。 线段C的两个端点分别位于线段A和线段B上。 线段A和线段B所形成的夹角在\((0^\circ,90

[oiclass2478] Kamp:树形DP+换根+最长链

题意 一颗树 \(n\) 个点,\(n-1\) 条边,经过每条边都要花费一定的时间,任意两个点都是联通的。 有 \(K\) 个人(分布在 \(K\) 个不同的点)要集中到一个点举行聚会。 聚会结束后需要一辆车从举行聚会的这点出发,把这 \(K\) 个人分别送回去。 请你回答,对于 \(i=1\sim n\),如果在第 \(i\) 个点

二分数组的一些搜索方法

Array.prototype.findSort=function(num1) { var hasSortArr=this; var l=0,r=hasSortArr.length; var lock=-1; var dis=0; var dis1=0,dis2=0; if(hasSortArr.length>0){ dis1=num1-hasSortArr[0]; if(dis1<=0){ return [0,dis1] } dis2=num1-

P7293-[USACO21JAN]Sum of Distances P【统计,bfs】

正题 题目链接:https://www.luogu.com.cn/problem/P7293 题目大意 有 k k k张联通无向图,有 k k k个

编辑距离

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 def minDistance(word1, word2): n1 = len(word1) n2 = len(word2) if n1 * n2 == 0: return n1 + n2 m = [[0 for i in range(n1+1)] for j in range(n2+1)] f

5683 道路拆除

5683 道路拆除 这个题也就是最短路径呗,挺好的,我猜猜,首先求一下最短路径然后把不是最短路径的边全部删去 很显然我猜错了 由起点开始到两个终点,很容易理解是最短路 接着想,直接最短路是行不通的,因为我们要求经过的次数,直接最短路过重复 那么怎么样子做到不重复? 于是就要跑三遍

CF986A

今天中午把这个写了,BFS就可以收尾了。 再也不可以咕到明天了!再咕我就是大鸽子! 进入正文: 有一定难度的BFS! 说白了,有难度的BFS就只有这几种情况吧(个人认为): 1.需要逆向解决(即多起点单终点) 经典例子:P1332 血色先锋队 2.不一样的障碍物(如动态,传送门等) 经典例子:P1825 [USACO11OPEN]Corn

最优贸易

嘟嘟嘟   换句话说,就是寻找一条从1到n的路径,使路径上两点x, y(先经过x再经过y)使val[x] - val[y]最大。 还可以用dp的思想来做这道题:令dis1[x]表示1到x的所有路径中val最小的点,dis2[x]表示从t到x的所有路径中val最大的点,这样答案就是max(dis2[x] - dis1[x])。 用dijkstra就可以实现

最短路径专题

Floyd模板 #include<bits/stdc++.h> using namespace std; const int maxn=10005; int n,m,x,y,a,b,w,f[maxn][maxn]; int main(){ cin>>n>>m>>x>>y; memset(f,0x3f,sizeof(f)); for(int i=1;i<=m;i++)cin>>a>>b>>w,f[a]

Path HDU - 6582【求最短路所有边+最小割】

题意:   给一个有向图,删除每一条边的代价是边的长度,要求花费最小的代价,使得 1→n1\to n1→n最短路变长,求该最小花费。 思路:   要使得最短路变长,那么删除的边一定要破坏原来的最短路。即要先把所有最短路的所有边找出来,通过删除某几条边,使得所有的最短路无效。   如何

ZJNU 1367 - Party--中高级

寻找从i到X,再从X到i的最短路 可以在正向图中从X开始跑一遍最短路,每个点的距离dis1[i]当作从X回到点i的距离 再将图反向从X再跑一遍,每个点的距离dis2[i]当作从i到点X的距离 最后搜索dis1[i]+dis2[i]值最大的输 1 /* 2 Written By StelaYuri 3 */ 4 #include<bits/stdc++.h> 5

【XSY1953】【BZOJ4012】【HNOI2015】开店(动态点分治)

\(Description\) 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学。最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱。这样的想法当然非常好啦,但是她们也发现她们面临着一个问题,那就是店开在哪里,面向什么样的人群。很神奇的是,幻想乡的地图是

Roadblocks POJ 3255(次短路)

原题 题目链接 题目分析 给无向图,求次短路.相对于第k短路而言次短路还是好求的,只需要在跑dijkstra的过程中顺便记录次短路就行了. 代码 1 #include <cstdio> 2 #include <cstdlib> 3 #include <iostream> 4 #include <algorithm> 5 #include <utility> 6 #include <ctime> 7 #

Silver Cow Party POJ - 3268(找各个点到源点来回路程最短中的最大值)

POJ—3268 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1…N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i

cogs 176. [USACO Feb07] 奶牛聚会 dijkstra

176. [USACO Feb07] 奶牛聚会 ★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比时间限制:3 s   内存限制:16 MB 译: zqzas N(1 ≤ N ≤ 1000)个农场中的每个农场都有一只奶牛去参加位于第X个农场的聚会.共有M (1 ≤ M ≤ 100,000)条单向的道路,每条道路连接一对

348.大陆争霸「SDOI2010」

#348.大陆争霸「SDOI2010」 #348. 大陆争霸「SDOI2010」 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国。两个国家的人民分别信仰两个对立的神:杰森

双向存图解题

P1629 邮递员送信  P1342 请柬  P1821[USACO07FEB]银牛派对Silver Cow Party 都是求的往返的最大,最小路径,用堆优化的dijkstra跑两遍就行,都是板子题 银牛派对的代码: #include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;int dis1[100

[NOI2003]逃学的小孩

发现题目要求的相当于是在一颗树上面求\(dis(A,B)+min(dis(A,C),dis(B,C))\) 显然我们要最大化这个,前面的一定要是直径,后面那个直接随便乱求就行了。 /* mail: mleautomaton@foxmail.com author: MLEAutoMaton This Code is made by MLEAutoMaton */ #include<stdio.h> #incl

CF360E Levko and Game【贪心+dijsktra】

先把所有边可动设为r[i]又这些边不是l就是r(如果想一个方向改变能更优的话就尽量多的改变),每次跑dijsktra,对于可动边(x,y),如果dis1[x]<=dis2[x],那么就把这条边改为l[i] 感性理解是对于dis1[x]<=dis2[x]一定是希望这条边向后能成为最短路以符合要求,所以把这样的边到t的距离尽量缩短 #i

[题解] P1342 请柬

洛谷 P1342 思路 分别建一张原图,一张与原图中所有边方向相反的反图。在两张图上分别跑一遍SPFA,再计算出两次dis数组的和即可。 Code #include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<queue>typedef long long LL;#define maxn 1000005using names

记录PTA甲级以及C++部分语法知识1046-数组求和预处理

提前对数组求和降低时间复杂度。 #include<iostream> using namespace std; int Sum[100002]={0}; int Min(int a,int b){ return a<b? a:b; } int main(){ int N,i,a,b,temp; cin>>N; Sum[1]=0; for(i=2;i<=N;i++){ scanf("%d",&Sum[i]); Sum[i

codeforces 1110F

题解: 正解做法比较简单,考虑离线之后,相邻两个节点之间的答案是有关系的 发现从父亲移到儿子后,改变的距离对于当前节点子树内和子树外的是一样的 所以线段树维护一下区间加减取max就可以了 另外的做法1: 过不了,考虑分块 对连续的叶子分成一个块,维护每个点到这个点的距离,可以多源最短