首页 > 其他分享 >2023/2/2刷题复盘

2023/2/2刷题复盘

时间:2023-02-02 21:46:47浏览次数:71  
标签:lld sum ans 复盘 2023 include ll road 刷题

Travel-牛客

算法:

floyd+离散化处理

链接

思路:

因为m只有20,因此有传送门的点不超过40个,我们可以floyd暴力这40个点之间的最短路,因为没有传送门的话,点之间的最短距离是固定的,因此每次查询暴力传送门两点即可。因为点的范围很大,所以要离散化一发。。

代码:

#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#define inf 10000000000
using namespace std;
typedef long long ll;
ll a[6],sum[6],b[4],road[10][10],n,m,cnt,ans;
ll findans(ll x,ll y)
{
	if(x>y) swap(x,y);
	return min(abs(sum[y]-sum[x]),abs(sum[x]+sum[n]-sum[y]));
}
struct node
{
	ll u,v,w;
}g[500];
int main(void)
{
	ll i,j,k,q;
	scanf("%lld%lld",&n,&m);
	for(i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	for(i=n+1;i>1;i--)
		a[i]=a[i-1];
	a[1]=a[n+1];
	for(i=1;i<=n;i++)
		sum[i]=sum[i-1]+a[i];
	for(i=1;i<=m;i++)
	{
		scanf("%lld%lld%lld",&g[i].u,&g[i].v,&g[i].w);
		if(g[i].u==g[i].v)
			continue;
		b[++cnt]=g[i].u;
		b[++cnt]=g[i].v;
	}
	sort(b+1,b+cnt+1);
	cnt=unique(b+1,b+cnt+1)-b-1;///cnt=2
	for(i=1;i<=cnt;i++)
		for(j=1;j<=cnt;j++)
			road[i][j]=road[j][i]=findans(b[i],b[j]);///对与cnt对点,环上b[i]->b[j]点的距离最小值
	for(i=1;i<=m;i++)
	{
		ll x=lower_bound(b+1,b+cnt+1,g[i].u)-b;///进行离散化操作
		ll y=lower_bound(b+1,b+cnt+1,g[i].v)-b;///x,y均为下标
		road[x][y]=road[y][x]=min(g[i].w,road[x][y]);///对与cnt对点,考虑且只考虑快速通道后b[i]->b[j]点的距离最小值
	}
	for(k=1;k<=cnt;k++)
		for(i=1;i<=cnt;i++)
			for(j=1;j<=cnt;j++)
				if(road[i][j]>road[i][k]+road[k][j])///对于cnt对点,再考虑环上可能走法b[i]->b[j],引入k点进行三点松弛操作
					road[i][j]=road[i][k]+road[k][j];
	scanf("%lld",&q);
	while(q--)
	{
		ll x,y;
		scanf("%lld%lld",&x,&y);
		ans=findans(x,y);///环上b[i]->b[j]点的距离最小值
		for(i=1;i<=cnt;i++)
			for(j=1;j<=cnt;j++)///在所有的快速通道(i->j)中,找到一组(i,j),使得x->b[i]->b[j]->y路程最短
				ans=min(ans,abs(findans(x,b[i])+road[i][j]+findans(b[j],y)));
		printf("%lld\n",ans);
	}
	return 0;
}

离散化算法

标签:lld,sum,ans,复盘,2023,include,ll,road,刷题
From: https://www.cnblogs.com/tfb11thLion/p/17087496.html

相关文章

  • Codeforces Round #845 (Div. 2) and ByteRace 2023(A,B,C)
    CodeforcesRound#845(Div.2)andByteRace2023(A,B,C)AA这个题目大意是有n个数,我们需要让ai和ai+1的奇偶性不一样我们可以让相邻的两个数变成一个数,那个数就是这两个......
  • 2023-2-2面经
    某个不知道的公司就问了我几个,我还忘记了,我服了。vue组合式API组合式API和选择式API的区别要实现组合式API需要下载其他的东西吗?举例。必竟做了一套机式题,用react......
  • 2023/2/2 考试总结
    时间安排8.30~9.00T2本质不同的只有\(O(n)\)个集合,所以有个很显然的\(O(n^2\logn)\)的做法。9.00~10.00T1等价于是二分图多重匹配,因为右部点个数少,可以直接Hall定理判......
  • 2023.2 做题笔记
    【Baekjoon19394】EulerianOrientation选中边不好做,考虑删除边,一个删除\(x\)条边的图的权值是\((m-x)^2\),令\(k\)个合法图分别删除\(x_1,x_2,...,x_k\),答案就是\(......
  • 2023牛客寒假算法基础集训营5
    2023牛客寒假算法基础集训营5AA很好理解题目大意是找k个小于等于x的物品(最多k个)的和最大是多少我们可以先把所有的a排序,然后求前缀和然后每次询问,我们需要的是小于等......
  • 西湖论剑 2023
    西湖论剑2023搞了一天出了俩逆向,还有一个没交上…1.Dualpersonality类似天堂之门,将cs段寄存器设为0x33,切换到64位模式;设为0x23,切换回32位模式。32位、64位模式切......
  • 2023.2.2 日寄
    距离放假还有\(\underline{~1~}\)天2023.2.2日寄一言\(~~~~\)“全国公民们,在三十五分钟后,我们的国家可能受到一次大规模核打击。加上第一批核弹头到达前所用的飞行......
  • 软考复盘:系统架构设计师核心考点总结
    大家好,我是Edison。去年(2022)复习备考参加了软考高级资格中的系统架构设计师考试。在系统架构设计师考试中,软件架构设计这一部分绝对是重点中的重点。这里,我总结了一下软......
  • 2023牛客寒假算法基础集训营4 A-H+JLM
    比赛链接A题解知识点:数学。算一下发现\(3\)最好,\(2,4\)并列,\(4\)以后递减。于是,特判\(3\),其他取最小值。(众所周知,\(e\)进制最好qwq。时间复杂度\(O(1)\)......
  • kubernetes关于eks一次异常问题的复盘
    背景:海外新加坡有一套aws的eks集群,很小的规模托管的三节点(172-31-16-189节点为最近才加的,忽略):[root@ip-172-31-10-1~]#kubectlgetnodesNAME......