hdu 3926 Hand in Hand (图同构)
这题就是判断图是否同构。
题意:有n个小朋友,他们之间手牵手形成了一张图。而且不会有超过三只手牵在一起。 简单说就算给你两张图,判断两个图是否同构。
思路:因为不会有超过三只手牵在一起,既每个节点的度最多为2。所以对于图中的每个顶点要么在一个环中,要么在一条链中。这样要判断图是否同构的话,可以判断两张图中,环的数目和每个换种的节点数是否相等,还有链的数目以及每条链中的节点数目是否相等。这个过程可以用STL的multiset来完成。
找环的话,只要在dfs的时候判断节点是否被访问过,如果被访问过,并且不是当前节点的父节点的话,则改连通分量是一个环。这里说的父节点是dfs序。
说到图同构,08年的区域赛这题也很类似,不过因为节点只有8个,可以通过暴力方法判断。
http://acm.hdu.edu.cn/showproblem.php?pid=2464
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 10;vector<int> G1[maxn];
vector<int> G2[maxn];vector<bool> sign1, sign2;void dfs(int cur, int fa, bool& ring, int& size, vector<int> G[maxn], vector<bool>& sign) {size++;sign[cur] = true;for (auto& val : G[cur]) {if (sign[val] == false) {dfs(val, cur, ring, size, G, sign);}else if (sign[val] == true && val != fa) {ring = true;}}
}int main() {ios::sync_with_stdio(false);int t;cin >> t;int cases = 0;while (t--) {int n1, m1;int n2, m2;int i, j;cin >> n1 >> m1;sign1.clear();sign1.resize(n1 + 10);for (i = 0; i <= n1; i++) {G1[i].clear();}int a, b;for (i = 0; i < m1; i++) {cin >> a >> b;G1[a].push_back(b);G1[b].push_back(a);}cin >> n2 >> m2;sign2.clear();sign2.resize(n2 + 10);for (i = 0; i <= n2; i++) {G2[i].clear();}for (i = 0; i < m2; i++) {cin >> a >> b;G2[a].push_back(b);G2[b].push_back(a);}//if (n1 != n2 || m1 != m2) {// cout << "Case #" << ++cases << ": NO" << endl;// continue;//}multiset<int> ring1, ring2;multiset<int> link1, link2;for (i = 1; i <= n1; i++) {if (!sign1[i]) {bool ring = false;int size = 0;dfs(i, -1, ring, size, G1, sign1);if (ring) {ring1.insert(size);}else {link1.insert(size);}}}for (i = 1; i <= n2; i++) {if (!sign2[i]) {bool ring = false;int size = 0;dfs(i, -1, ring, size, G2, sign2);if (ring) {ring2.insert(size);}else {link2.insert(size);}}}if (ring1 == ring2 && link1 == link2) {cout << "Case #" << ++cases << ": YES" << endl;}else {cout << "Case #" << ++cases << ": NO" << endl;}}return 0;
}
讲道理,这就是一个道水题,但还是被坑了很久,wa了三四发。一开始以为是思路还是dfs写错了。找了半天,发现是sign1数组出锅了。一开始每次sign1和sign2都只是进行resize()而且。但是忘了resize并不会改变已有的值。如果是这样的话,应该是样例就过不去的。但是我刚开始为了省事,所以加了下代码中注释的部分。导致第二个cases没用经过dfs就直接输出结果了。让我错以为没啥错。 要不是试着把这个部分删了试试看,还真找不到错误。。
汗,第N 次在STL上栽了。在此记录一下自己犯得傻。
if (n1 != n2 || m1 != m2) {cout << "Case #" << ++cases << ": NO" << endl;continue;}
hdu 3926 Hand in Hand (图同构)相关推荐
- HDU 3926 图的同构
Hand in Hand 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3926 Problem Description In order to get ...
- 杭电OJ分类题目(4)-Graph
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...
- 图论500题 慢慢写
题目来源 https://blog.csdn.net/ffq5050139/article/details/7832991 这篇博客用来记录自己刷的图论题 先占个坑 所有题目都来自上面的链接 会慢慢更 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- hdu 1312 Red and Black 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
最新文章
- 开放封闭原则(OCP)
- hyundai-wia
- DDoS攻防战(三):ip黑白名单防火墙frdev的原理与实现
- Freeswitch之ASR(语音识别)总结大全
- 科技计划项目数据管理过程模型
- 智能语音识别系统_语音识别技术原理_智能语音识别系统如何识别用户意图_企业服务汇...
- 易语言学习笔记(一)
- 数据结构笔记(二十三)--哈夫曼树
- 计算机应用基础演讲怎么开口,计算机应用基础讲课稿
- TableViewCell 自定义分割线
- CocoStudio1.3 场景编辑器使用
- fn键台式计算机在哪,fn键在哪?小鱼教您fn键使用方法
- QQ.阿里旺旺.淘宝.在线网页链接代码及详解
- python轮子下载教程
- 【学习OpenCV4】键盘鼠标操作总结
- 激光打印机的工作原理2
- 家乐福618安全与性能保卫战(一)-安全高地保卫战
- Python爬取wallhaven壁纸 2023.1.31
- android camera分辨率设置,如何使用OpenCV在Android中设置相机分辨率?
- ubuntu20安装出现致命错误_Ubuntu 20.04 依赖包安装错误解决方案
热门文章
- 荣耀手机无法升级鸿蒙,荣耀手机不能升级鸿蒙了?博主给出升级名单
- mysql-建新用户与删除用户并限制ip登录
- Linux基本命令的使用
- 三行代码把女朋友照片变成了素描图片!人生苦短,爱python多一些
- php支付宝第三方授权,thinkphp支付宝,微信第三方支付(PC版)
- 2021年5月-国家注册审核员-《认证通用基础》真题7-解析版
- 鸿蒙os3.0评测,华为P50Pro+:徕卡3+2双环镜头,麒麟9000芯片配鸿蒙OS3.0
- FinalShell,免费好用的国产ssh连接工具
- Python爬取全民小视频网站视频,可爬取全站视频
- ios开发怎么接入面容id_Flutter混合开发