Strange Country II 【ZOJ - 3332】【竞赛图求解哈密顿通路】
N(N>=2)阶竞赛图构造哈密顿通路
N阶竞赛图:含有N个顶点的有向图,且每对顶点之间都有一条边。对于N阶竞赛图一定存在哈密顿通路。
证明及原理
然后,又有题目中给出的就是一个竞赛图,所以我们可以直接推理哈密顿通路即可,时间复杂度。
讲解写在注释里了。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 1e2 + 7;
int ans[maxN], mp[maxN][maxN], N;
inline void Insert(int &len, int l, int r) //The ans[] length is len, insert key befor arv[index]
{len++;for(int i=r; i>=l; i--){ans[i + 1] = ans[i];}ans[l] = len;
}
void Hamilton()
{int have_node = 0;ans[++have_node] = 1;for(int i = 2; i <= N; i++) //插入点i{if(mp[ans[have_node]][i]) ans[++have_node] = i; //第一种情况,直接把当前点添加到序列末尾else{bool flag = false;for(int j = have_node - 1; j; j--) //在当前序列中,从后往前找到第一个满足条件的点j,使得存在<Vj,Vi>且<Vi, Vj+1>.{if(mp[ans[j]][i]) //找到后把该点插入到序列的第j + 1个点前.{flag = true;Insert(have_node, j + 1, have_node);break;}}if(!flag) Insert(have_node, 1, have_node); //否则说明所有点都邻接自点i,则把该点直接插入到序列首端.}}
}int main()
{int t; scanf("%d", &t);while(t--){scanf("%d", &N);memset(mp, 0, sizeof(mp));int M = N * (N - 1) / 2;for(int i = 0; i < M; i++){int u, v;scanf("%d%d", &u, &v);mp[u][v] = 1;}Hamilton();for(int i = 1; i <= N; i++) printf(i == 1 ? "%d":" %d", ans[i]);printf("\n");}return 0;
}
Strange Country II 【ZOJ - 3332】【竞赛图求解哈密顿通路】相关推荐
- 哈密顿图 哈密顿回路 哈密顿通路(Hamilton)
本文链接:http://www.cnblogs.com/Ash-ly/p/5452580.html 概念: 哈密顿图:图G的一个回路,若它通过图的每一个节点一次,且仅一次,就是哈密顿回路.存在哈密顿回 ...
- 算法学习---关于哈密顿图的哈密顿通路求解问题
之前以自己一渣渣之身参加了一个比赛,果然连门槛都没摸到,虽然略有沮丧不过还是得到了很多思考哒,这里记一下. 因为之前没有接触过算法,感觉这个可能也只是能够解决问题,效率极低,先记下来以后有兴致慢慢优化 ...
- 最短哈密顿路matlab,SHP-VI: 一种基于最短哈密顿通路的POMDP值迭代算法
摘要:基于试探(trial-based)的值迭代算法是求解部分可观察Markov决策过程(partially observable Markov decision process,POMDP)模型的一 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 【HDOJ图论题集】【转】
1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...
- 一系列图论问题[转]
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- 图论练习题(存起来练)
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Man ...
- NOIP 好题推荐(DP+搜索+图论)POJ ZOJ
NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS) 1090 Chain ->格雷码和二进制码 ...
- 哈密顿回路、链路、竞赛图
目录 一,哈密顿回路.哈密顿链路 二,Dirac定理 三,算法 力扣 996. 正方形数组的数目 力扣 980. 不同路径 III 四,竞赛图 五,相关puzzle 1,数字满格 2,马的哈密顿回路. ...
- 【算法笔记】竞赛图(有向完全图)(相关题型总结)
整理的算法模板合集: ACM模板 目录 竞赛图(有向完全图) 一.兰道定理 例题HDU 5873 Football Games 二.求竞赛图的任意三元环 三.求竞赛图的哈密顿回路数量的期望 竞赛图(有 ...
最新文章
- PetShop之表示层设计 - 《解剖PetShop》系列之六
- Centos7 上安装Docker
- 全球 PC 应用程序有半数已过期未更新
- Swift学习笔记(8)--函数
- Buuctf(PWN)ciscn_2019_c_1
- C语言二叉树总和等于k的所有路径的算法(附完整源码)
- 无重复字符的最长子串—leetcode3
- php 前往页面,PHP实现网页截图?
- simulink 解析udp数据_DNS 支持 TCP 和 UDP 双协议,但为何偏偏只钟情 UDP?
- C# OpenTK教程 - 1.1 创建窗口
- 【华为云技术分享】敏捷实践:一周的Sprint太短,可以调吗
- h5物体拖动_html5实现拖拽效果
- bzoj 2844 子集异或和名次
- linux oracle查看服务,技术|如何查看 Linux 中所有正在运行的服务
- CodeBlocks配置openGL教程
- 03 三维地图添加切片图层
- Latex表格一格内换行
- python画简便的图片-用python简单处理图片(5):图像直方图
- netty 远程主机强迫关闭了一个现有的连接。
- 朋友圈加粗字体数字_微信更新!朋友圈评论能发表情包,结果变成沙雕狂欢
热门文章
- 【CVPR2020】计算机视觉与模式识别会议论文完全清单_Part1
- this.el_.vjs_getProperty is not a function
- 吉林省教育学院学报杂志社吉林省教育学院学报编辑部2022年第9期目录
- 3DES实现加密算法
- 除了PS,这几款设计软件也是我的最爱
- 双下划线一粗一细怎么加_word 下划线 一粗一细
- IM 产品设计思考(4)- 问答机器人
- c51单片机超声测距hcsr04在 rtos运行的 实验 基于陈明计先生的smallrtos
- 微信朋友圈点赞生成器
- 如何理解掩码、反掩码、通配符