首页 > 其他分享 >蓝桥杯——仙境诅咒(dfs)

蓝桥杯——仙境诅咒(dfs)

时间:2024-03-28 12:29:18浏览次数:32  
标签:pq int 仙境 dfs 蓝桥 vis vector 数组

问题描述:

思路概述:

1)准备工作:

(1)设立一个数组vector<pair<double, double>> p,存储每个人的位置;

(2)设立一个数组vector<vector<int>> a,记录每个人所对应的距离小于D的人都有谁;

(3)设立一个数组bool vis[12345] = { 0 },记录每个人是否被污染;

2)搜索:

(1)第一个人已经被污染了,vis[0]=1;dfs(0);

(2)遍历a[0]数组,都数组里的人的vis赋值为1,并赋值后直接开始dfs;

3)优化:

已经被污染的人不重新进行污染和遍历;

4)注意事项:

读入n之后,需要对vector<vector<int>> a重新定义数组大小,或者初始化时数组大小设为n;

满分代码:

#include<bits/stdc++.h>
using namespace std;
int n;
int D;
bool vis[12345] = { 0 };
pair<int, int> pq;
vector<pair<double, double>> p;
#define w1 first
#define w2 second
vector<vector<int>> a;

void dfs(int dep)
{
	for (int &i : a[dep])
	{
		if (vis[i] == 1)continue;
		vis[i] = 1;
		dfs(i);
	}
	return;
}

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n;
  a.resize(n);
	for (int i = 1; i <= n; i++)
	{
		cin >> pq.w1 >> pq.w2;
		p.push_back(pq);
	}
	cin >> D;
	for (int i = 0; i < n - 1; ++i)
	{
		for (int j = i + 1; j <n; ++j)
		{
			if ((int)(pow(p[i].w1 - p[j].w1, 2)) <= D*D - (int)(pow(p[i].w2 - p[j].w2, 2)))
			{
				a[i].push_back(j);
				a[j].push_back(i);
			}
		}
	}
	vis[0] = 1;
	dfs(0);
	for (int i = 0; i<n; i++)
	{
		cout << vis[i] << "\n";
	}
	return 0;
}

标签:pq,int,仙境,dfs,蓝桥,vis,vector,数组
From: https://blog.csdn.net/vs408/article/details/137107358

相关文章

  • P8792 [蓝桥杯 2022 国 A] 最大公约数
    #include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;constintN=1e5+5;intgcd(intx,inty){re......
  • 第十一届蓝桥杯单片机省赛解答
    第一部分1.C2.BD3.B4.D5.ABC6.B7.AB8.D9.ABCD10.C接收和发送数据是互不影响的第二部分#include"STC15.h"#include"sys.h"#include"smg.h"#include"onewire.h"#include"iic.h"#include"key.h"uinttemp=0;......
  • P1605 迷宫 (对坐标dfs)
    写在前面:        我可太牛了!第一次写就能得70分!信心倍增!        OMG!五分钟找出漏洞,我真是太棒啦!        这道题要注意,一定要将初始起点坐标状态设为true!题目:代码:#include<algorithm>#include<iostream>#include<cstring>#include<queue>#in......
  • 蓝桥杯试题 基础练习 特殊回文数
    问题描述123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。输入格式输入一行,包含一个正整数n。输出格式按从小到大的顺序输出满足条件的整数,每个整数占一行。样例......
  • 2023第14届蓝桥杯大赛软件赛省赛C/C++大学A组第6题题解
    目录问题描述:方法一:dfs暴力模拟(45%)方法二:dfs剪枝(100%)问题描述:        小蓝正在一个瓜摊上买瓜。瓜摊上共有n个瓜,每个瓜的重量为Ai。小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。小蓝希望买到的瓜的重量的和恰好为m。请问小蓝至......
  • 蓝桥杯单片机AT24C02
    一个简单的示例程序,统计开机次数。代码如下:#include<STC15F2K60S2.H>#include<intrins.h>#include"onewire.h"#include"iic.h"u8flag_display=0;u8flag_ds18b20=0;u8flag_at=0;u8at=0;u8temp=0;u8a[8]={10,10,10,10,10,10,10,10};voidctr......
  • 动态规划刷题(算法竞赛、蓝桥杯)--数字三角形(线性DP)
    1、题目链接:[USACO1.5][IOI1994]数字三角形NumberTriangles-洛谷#include<bits/stdc++.h>usingnamespacestd;intr;constintN=1010;inta[N][N];intmain(){ cin>>r; for(inti=1;i<=r;i++){ for(intj=1;j<=i;j++){ cin>>a[i][j]; ......
  • 【蓝桥杯3.23小白赛】(详解)
    第一题签到题不多说【二进制王国】#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;//intCmp(strings1,strings2)测试了一下时间差确实很明显,还是用下面的内个intCmp(conststring&s1,conststring&s2)//const修饰表示在函......
  • 【蓝桥杯选拔赛真题48】C++九进制回文数 第十四届蓝桥杯青少年创意编程大赛 算法思维
    目录C++九进制回文数一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、推荐资料C++九进制回文数第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题一、题目要求1、编程实现提示信息:回文数:反向排列与原......
  • 蓝桥杯练习题总结(三)线性dp题(摆花、数字三角形加强版)
    目录 一、摆花思路一: 确定状态:初始化:思路二:确定状态:初始化:循环遍历: 状态转移方程: 二、数字三角形加强版一、摆花题目描述小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了......