1139 First Contact (30分)[DFS]
By Jalan
文章目录
- **By Jalan**
- 知识工具需求
- 数据结构和算法
- 题干
- 题解
- 第一次
- 思路
- 编写用时
- 代码
- CPP
- 运行用时
- 结尾
知识工具需求
数据结构和算法
- DFS
题干
通过两个中间人找对象
题解
第一次
思路
- 输入要注意-0的存在,同一个编号不会有2个性别.所以用一个hash表来存是不是女生
- DFS,注意剪枝,这里我放了一个写在一个DFS的情况,实际上可以把两人是同性别和不同性别分开写,这样可以让逻辑更清晰.
- 统一两个DFS的时候借鉴了一个老哥的代码,但是我实在找不到那个老哥的网页了(中途接了对象电话顺便吃了个饭关机了),对不起,砰砰砰…
编写用时
60分钟
代码
CPP
#include <algorithm>
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
typedef struct node
{int first, second;
} node;
const int maxN = 10010;
int n, m;
vector<vector<int>> g(maxN);
vector<int> isGirl(maxN);
int start, ed;
int first, second;
vector<node> ans;
vector<int> test(6);
bool cmp(node a, node b)
{return a.first != b.first ? a.first < b.first : a.second < b.second;
}
void DFS2(int index, int depth)
{ if (depth == 2){if (index == ed ||index==start|| isGirl[index] != isGirl[start])//index == ed ||index==start||防止同性时找自己{return;}first=index;}if (depth == 3){if (index == ed ||index==start||isGirl[index] != isGirl[ed])//index == ed ||index==start||防止同性时找自己{return;}second=index;}if (depth == 4){if (index != ed){return;}ans.push_back(node{first, second});return;}for (int i = 0; i < g[index].size(); i++){int v = g[index][i];if (v != index)//有向..{DFS2(v, depth + 1);}}
}
int main(int argc, char const *argv[])
{scanf("%d %d", &n, &m);for (int i = 0; i < m; i++){char u[10], v[10];scanf("%s %s", u, v);string as(u), bs(v);int a = abs(stoi(as));int b = abs(stoi(bs));if (as[0] == '-'){isGirl[a] = 1;}if (bs[0] == '-'){isGirl[b] = 1;}g[a].push_back(b);g[b].push_back(a);}int k;scanf("%d", &k);for (int i = 0; i < k; i++){scanf("%d %d", &start, &ed);start = abs(start);ed = abs(ed);ans.clear();DFS2(start, 1);printf("%d\n", ans.size());sort(ans.begin(), ans.end(), cmp);for (int j = 0; j < ans.size(); j++){printf("%04d %04d\n", ans[j].first, ans[j].second);}}return 0;
}
运行用时
结尾
看在我写了这么多注释的份上可以给我点个赞嘛,求求惹=]砰砰砰,给我加点写下去的油呀
@.@
也欢迎关注我的CSDN账号呀=]
**开心code每一天**
1139 First Contact (30分)[DFS]相关推荐
- PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射
文章目录 题目分析 题目链接 题目分析 来源:acwing 题目分析: 图论模拟题. 给定暗恋的两个人A 和B,需要寻找一对C 和D ,满足:A和C是朋友,C和D是朋友,D和B是朋友.而且A.C同性别 ...
- 1139 First Contact (30 分)【难度: 一般 / 知识点: 模拟】
https://pintia.cn/problem-sets/994805342720868352/problems/994805344776077312 难倒是不难,但是有坑,例如-0000,000 ...
- 【CCCC】L3-014 周游世界 (30分),,DFS搜索最短路,路径打印
problem L3-014 周游世界 (30分) 周游世界是件浪漫事,但规划旅行路线就不一定了-- 全世界有成千上万条航线.铁路线.大巴线,令人眼花缭乱.所以旅行社会选择部分运输公司组成联盟,每家公 ...
- 重返天梯-L3-014 周游世界 (30 分)(dfs)
题目描述 周游世界是件浪漫事,但规划旅行路线就不一定了-- 全世界有成千上万条航线.铁路线.大巴线,令人眼花缭乱.所以旅行社会选择部分运输公司组成联盟,每家公司提供一条线路,然后帮助客户规划由联盟内企 ...
- 地下迷宫探索 30分 dfs
地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...
- PAT甲级1147 Heaps (30 分):[C++题解]堆、树的遍历、dfs、完全二叉树建树
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:给定完全二叉树,判断是否是堆,需要区分大根堆,小根堆.后面是输出后序遍历. AC代码 #include<bits/stdc++. ...
- PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 堆首先是完全二叉树,所以先建完全二叉树,由于给定的是层序遍历的数据,所以直接用数组即可,注意数组下标从1开始,这样便满足结点u和左儿 ...
- PAT甲级1053 Path of Equal Weight (30分) :[C++题解]dfs求树的路径长度、邻接表
文章目录 题目分析 题目链接 题目分析 输入样例: 20 9 24 10 2 4 3 5 10 2 18 9 7 2 2 1 3 12 1 8 6 2 2 00 4 01 02 03 04 02 1 ...
- PAT甲级1119 Pre- and Post-order Traversals (30分):[C++题解]暴搜dfs、前序遍历和后序遍历求中序遍历
文章目录 题目分析 题目链接 题目分析 分析 给了前序遍历和后序遍历,能够确定根结点,但是左子树和右子树的长度是不确定的.这里采用的解决方案是枚举左子树的结点个数,其实右子树的结点个数也确定了.对于每 ...
最新文章
- 用二维编码做特色名片!
- win10电脑如何安装Openssh?开启Server服务?
- 拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?
- 微信APP支付的坑 - errorcode=-1
- STM32F013 十元板
- php部分---单文件上传的封装类
- oracle hang analyze,Oracle hanganalyze工具的使用
- WebRTC下载及编译(二)
- phper的何去何从
- 淘宝店铺装修:如何实现全屏1920px,从上到下!
- 编译原理04-自顶向下语法分析方法
- 自定义一个腾讯云短信验证码接口spring-starter
- jQuery 样式操作
- 什么是黎曼和?什么是定积分?
- 老王卖西瓜python_python 老王装货
- Java程序打包成jar文件
- 面了一个4年经验的测试工程师,自动化都不会也要15k,我真是醉了...
- 订单外卖小程序前台后台项目设计
- 谈谈百度/GOOGLE联盟和一般联盟的区别
- 老司机珍藏的130个网站,没人的时候偷偷看!