首页 > 其他分享 >2024.11.11总结

2024.11.11总结

时间:2024-11-11 21:31:30浏览次数:1  
标签:11 总结 2024.11 int 路径 xx John dis 105

John的农场是一张 N*N 的方格图,贝茜住在左上角(1,1),John住在右下角(N,N)。

现在贝茜要去拜访John,每次都只能往四周与之相邻的方格走,并且每走一步消耗时间 T。

同时贝茜每走三步就要停下来在当前方格吃草,在每个方格吃草的用时是固定的,为 H[i][j]。

John想知道贝茜最少要多久才能到达John的家。

跑一遍djstl。

#include<bits/stdc++.h>
using namespace std;
constexpr int inf = 1e9;
int n, t, h[105][105],d[105][105][5];
int dx[] = {1,-1,0,0,},dy[] = {0,0,1,-1};

struct Pr{
	int a, b;
};
queue<Pr> q,q1;
int main(){
	cin>>n>>t;
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= n;j++){
			cin>>h[i][j];
		}
	for(int i = 0;i < 105;i++){
		for(int j = 0;j < 105;j++){
			d[i][j][0] = d[i][j][1] = d[i][j][2] = d[i][j][3] = d[i][j][4] = inf;
		}
	}
	q.push({1,1}),q1.push({0,0}),d[1][1][0] = 0;
	while(!q.empty()){
		for(int i = 0;i < 4;i++){
			int x = q.front().a + dx[i],y = q.front().b + dy[i];
			if(x > 0 && x <= n && y > 0 && y <= n){
				int s = (q1.front().a + 1) % 3,v = q1.front().b
				+ t + (!s) * h[x][y];
				if(v < d[x][y][s]){
					q.push({x,y}),q1.push({s,v}),d[x][y][s] = v;	
				}
			}
		}
		q.pop(), q1.pop();
	}
	cout<<min(d[n][n][0],min(d[n][n][1],d[n][n][2]));
}

给定一个完全图,已知两点之间的距离,以及通过某个点的时间(起点和终点不需要花费时间)。你需要回答一些询问,输出两点之间的最短路径,同时需要输出方案。如果有多个方案,输出字典序最小的方案。

数据范围极小,djstl,同时统计一下路径。



一个n点m边无向图,边权均为1,有k个询问

每次询问给出(s,t,d),要求回答是否存在一条从s到t的路径,长度为d

路径不必是简单路(可以自交)

数据保证不存在自环

由于两个点路径距离为d,就一定存在距离为d+2的路径。所以分层图对每个点跑一边spfa求出每个点到其他点经过奇数路径和偶数路径的距离,然后就可以直接判了。

#include<bits/stdc++.h>
#define N 5005
#define INF 0x3f3f3f3f
using namespace std;
template<typename T>inline void read(T &a){
	char c=getchar();T x=0,f=1;
	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
	while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
	a=f*x;
}
vector<int> t[N];
int n,m,k,tot,h[N];
bool vis[N],ans[1000005];
int dis[2][N];
struct query{
	int u,v,w;
}q[1000005];
struct node{
	int nex,to;
}edge[N<<1];
inline void add(int u,int v){
	edge[++tot].nex=h[u];
	edge[tot].to=v;
	h[u]=tot;
}
inline void spfa(int s){
	queue<int> Q;
	for(int i=1;i<=n;i++)dis[0][i]=INF,dis[1][i]=INF,vis[i]=0;
	Q.push(s);vis[s]=1;dis[0][s]=0;
	while(!Q.empty()){
		   int x=Q.front();Q.pop();vis[x]=0;
		for(int i=h[x];i;i=edge[i].nex){
			   int xx=edge[i].to,flg=0;
			if(dis[0][x]!=INF){
				if(dis[1][xx]>dis[0][x]+1)
					dis[1][xx]=dis[0][x]+1,flg=1;
			}
			if(dis[1][x]!=INF){
				if(dis[0][xx]>dis[1][x]+1)
					dis[0][xx]=dis[1][x]+1,flg=1;
			}
			if(flg&&!vis[xx])Q.push(xx),vis[xx]=1;
		}
	}
}
int main(){
	cin>>n>>m>>k;
	for(int i=1,u,v;i<=m;i++){
		read(u);read(v);
		add(u,v);add(v,u);
	}
	for(int i=1;i<=k;i++){
		read(q[i].u),read(q[i].v),read(q[i].w);
		t[q[i].u].push_back(i);
	}
	for(int i=1;i<=n;i++){
		if(!t[i].size())continue;
		spfa(i);
		for(int j=0;j<(int)t[i].size();j++){
			   int o=t[i][j];
			   int num=q[o].w%2;
			if(q[o].w>=dis[num][q[o].v]&&h[i])ans[o]=1;
		}
	}
	for(int i=1;i<=k;i++)
		if(ans[i])printf("TAK\n");
	else printf("NIE\n");
	return 0;
}

标签:11,总结,2024.11,int,路径,xx,John,dis,105
From: https://www.cnblogs.com/Kang-shifu/p/18540619

相关文章

  • 11/11
    Link。有点难想的DP。考虑\(f_i\)表示前\(i\)个字符的最小代价,显然有转移方程\(f_i=\min\{f_{i-1}+a,\min_{j,k,k\gei-j,s_{j-k+1,\cdots,j}=s_{i-k+1,\cdots,i}}f_{j}+b\}\)。注意到复杂度是\(O(n^3)\)的。感性理解可以发现\(f\)单调不减。那么对于一个固定的\(......
  • NOIP2024模拟赛#18 总结
    头要炸了。T1题面很好懂,手玩了一下发现答案最小是\((m-1)\timesn\)。可能会多出来一个长度为\(k\)的部分,会发现如果多出来一个长度为\(k\)的部分且合法,那么单个串\(1\simk\)位与\(n-k+1\simn\)位一定相同,\(k+1\simn\)位与\(1\simn-k\)一定相同。Hash判一下即......
  • 24/11/11 算法笔记<视觉> 换脸,人脸特征点检测
    先介绍一下换脸的简单步骤1、提取两张图片的脸部特征点2、为两张图片创建mask3、进行映射变换使得人脸对齐4、使用opencv的泊松融合将两张图片合成我们直接上代码1.导入代码包importmediapipeasmpfrommediapipe.tasksimportpythonfrommediapipe.tasks.pythoni......
  • 2024/11/11日工作总结
    完成数据结构pta实验题:6-3链表逆置:本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下:structListNode{intdata;structListNode*next;};函数接口定义:structListNode*reverse(structListNode*head);其中head是用户传入的链......
  • 题解:P11262 [COTS 2018] 题日 Zapatak
    https://www.luogu.com.cn/article/i7ajvm8e哈希好题。题意给定一个序列,每次询问给定两个长度相等的区间,问这两个区间是否只有一个数不一样。思路发现我们要求的信息只与数的出现次数有关,自然想到桶。那么如果有两个区间合法,那这两个区间的桶只有两个位置不同且桶内的值均相......
  • 20241111
    HappyBirthdayElysia!T1很有味道的题目\(dp_i\)表示到\(a\)的第\(i\)个数,最多能到\(b\)的哪一个数。向后转移能够给到的是一个值域的后缀,离散化后BIT维护即可。代码#include<iostream>#include<algorithm>#definelowbit(x)((x)&(-(x)))#defineintl......
  • EEEE4116 Design for a 2-Level Inverter
    AdvancedControl(EEEE4116)Coursework1ModellingandAdvancedControllerDesignfora2-LevelGrid-FeedingInverterInthisassignmentyouwillbringtogetheryourskillsofstate-spaceequationdevelopmentandcontrollerdesigntocontrolagrid-tied......
  • C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等。每......
  • 杀怪物(NHOI2011pj4)
    题目为了庆祝自己的生日,小张推出一款游戏。游戏在一个20*20的方格上进行,上面有一些怪物,用#表示,其他是空格,用.表示。怪物有两点体力。体力为0时死亡。你可以进行以下操作:(1)使一个横行上的怪物体力减一(2)使一个竖行上的怪物体力减一对每个横行或竖行只能操作一次,限定n次,问最......
  • 快速排序,思路总结与实现
    思路找基准值(pivot)pivot=startorend比基准值小的放左边,大的放右边实现双指针,left从左到右找比基准值大的元素,right从右到左找比基准值小的元素找到后交换left和right指针的内容直到left=right这是递增排序,递减排序情况相反如果pivot=start,则右指针先动,否......