热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[NOI2009变换序列]

[关键字]:图论二分图匹配[题目大意]:太麻烦,就不说了[分析]:因为每个距离都对应着两个数字——就是d或-d,

[关键字]:图论 二分图匹配

[题目大意]:太麻烦,就不说了

//=========================================================================

[分析]:因为每个距离都对应着两个数字——就是+d或-d,这样0~n-1和它所转换的序列可以看成一个二分图的模型,而一个完备匹配就对应着一个序列。只要求一遍最大匹配看是否等于n。而字典序的问题,因为用匈牙利算法找增广路就是找到第一个没有被匹配或和它匹配的点可以找到另外一条增广路的点,这样每次都是将已经匹配过的点所匹配的点编号变大,如果倒着找匹配就恰好能保证序号越小就越可以找到编号小的点匹配。

[代码]:

View Code

#include
#include
#include
#include
#include
#include
using namespace std;

const int MAXN=20000;

int n;
int m1[MAXN],m2[MAXN];
bool v[MAXN];
vector<int> e[MAXN];

void Init()
{
int t1,t2,d;
scanf("%d",&n);
for (int i&#61;0;i {
scanf("%d",&d);
t1&#61;i&#43;d;
if (t1>&#61;n) t1%&#61;n;
t2&#61;i-d;
if (t2<0) t2&#43;&#61;n;
if (t1>t2) swap(t1,t2);
e[i].push_back(t1),e[i].push_back(t2);
}
}

bool DFS(int u)
{
for (vector<int>::iterator i&#61;e[u].begin();iif (!v[*i])
{
v[*i]&#61;1;
if (m2[*i]&#61;&#61;-1 || DFS(m2[*i]))
{
m1[u]&#61;*i;
m2[*i]&#61;u;
return 1;
}
}
return 0;
}

void Solve()
{
memset(m1,255,sizeof(m1));
memset(m2,255,sizeof(m2));
int ans&#61;0;
//for (int i&#61;0;i
for (int i&#61;n-1;i>&#61;0;--i)
{
memset(v,0,sizeof(v));
if (DFS(i)) &#43;&#43;ans; else break;
}
if (ans!&#61;n) printf("No Answer\n");
else
{
printf("%d",m1[0]);
for (int i&#61;1;i"
%d",m1[i]);
}
}

int main()
{
Init();
Solve();
system("pause");
return 0;
}



转:https://www.cnblogs.com/procedure2012/archive/2012/03/16/2400834.html



推荐阅读
  • A题简单判断#includeusingnamespacestd;typedeflonglongll;intt;intmain(){cint;whil ... [详细]
  • 首先说一下,这是我在CSDN上的第一个文章,其实这个账号早在几年前就申请了,不过当时只是为了下载一个资源,而且也不怎么懂信息技术相关的领域,后来就再也没怎么动过,直到今天我才开始使用这个账号 ... [详细]
  • 本文介绍了一种利用迭代法解决特定方程问题的方法,特别是当给定函数f(x)在区间[x1, x2]内连续且f(x1)0时,存在一个x~使得f(x~)=0。通过逐步细化搜索范围,可以高效地找到方程的根。 ... [详细]
  • 本文通过具体示例探讨了在 C++ 中使用 extern "C" 的重要性及其作用,特别是如何影响编译后的对象文件中的符号名称。 ... [详细]
  • 一个产品数组拼图|集合 2 (O(1)空间) ... [详细]
  • 每位开发者都应该拥有一个展示自我技能与分享知识的空间——个人技术博客。本文将指导你如何使用静态网站生成器Hexo结合GitHub Pages搭建这样一个平台。 ... [详细]
  • 程序打印菱形 ... [详细]
  • C++编程基础:探索自定义数据类型
    本文继续深入C++编程的基础知识,重点讲解自定义数据类型的概念及其应用,包括枚举类型、结构体和联合体等。 ... [详细]
  • 本文详细介绍了C++标准模板库(STL)中各容器的功能特性,并深入探讨了不同容器操作函数的异常安全性。 ... [详细]
  • 深入理解FastDFS
    FastDFS是一款高效、简洁的分布式文件系统,广泛应用于互联网应用中,用于处理大量用户上传的文件,如图片、视频等。本文探讨了FastDFS的设计理念及其如何通过独特的架构设计提高性能和可靠性。 ... [详细]
  • Xcode 快捷键与实用技巧
    在iOS开发过程中,熟练掌握Xcode的快捷键可以显著提升工作效率,减少不必要的鼠标操作,让开发者更加专注于代码编写。本文将介绍一些常用的Xcode快捷键及技巧,帮助开发者提高开发效率。 ... [详细]
  • Redis 教程01 —— 如何安装 Redis
    本文介绍了 Redis,这是一个由 Salvatore Sanfilippo 开发的键值存储系统。Redis 是一款开源且高性能的数据库,支持多种数据结构存储,并提供了丰富的功能和特性。 ... [详细]
  • 快速排序是基于分治策略的一种排序算法,其平均时间复杂度为O(n log n),在大多数情况下表现优于其他排序算法。本文将详细介绍快速排序的工作原理,并提供一个Java语言的具体实现。 ... [详细]
  • 本文探讨了如何在Django中创建一个能够根据需求选择不同模板的包含标签。通过自定义逻辑,开发者可以在多个模板选项中灵活切换,以适应不同的显示需求。 ... [详细]
  • WorldWind源代码解析:瓦片调度机制详解
    本文深入探讨了WorldWind项目中的关键组件——瓦片调度策略。通过源代码分析,我们将了解摄像头移动时如何动态调整瓦片的加载与卸载,确保地图渲染的高效与流畅。 ... [详细]
author-avatar
wo缘相聚在空间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有