@topcoder - 2017TCOAlgorithmRound2A - D1L2@ DistanceZeroAndOne
@description@
一个 n 个点的无向简单的连通图,编号从 0 到 n-1。
现给出每个点到点 0 的距离 dist0[]、每个点到点 1 的距离 dist1[],还原整张图,或判断无解。
Constraints
n 在 2 到 50 之间。
dist0 与 dist1 中的元素都在 0 到 n-1 之间。
Examples
0)
{0,2,1}
{2,0,1}
Returns: {
"NNY",
"NNY",
"YYN" }
整张图为 0 - 2 - 1。
{0,2,1}
{1,0,2}
Returns: { }
dist0[1] ≠ dist1[0]。
@solution@
根据三角形不等式,假如 u 与 v 之间有边,则 |dist0[u] - dist0[v]| ≤ 1 且 |dist1[u] - dist1[v]| ≤ 1。
如果 u, v 之间可以连边(即满足三角形不等式),则连 (u, v)。
显然边连的越多,点之间的距离越精确。
所以要是有解,则上面的连边方案一定可以得到一个合法解。
我们连完边过后再跑两边 bfs 检验一下这个图是否满足 dist0 与 dist1 的限制。
@accepted code@
#include<queue>
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
class DistanceZeroAndOne{
#define MAXN 50
private:
int a[MAXN][MAXN], n;
int abs(int x) {return x >= 0 ? x : -x;}
int d[MAXN];
public:
void bfs(int x) {
for(int i=0;i<n;i++)
d[i] = n;
d[x] = 0; queue<int>que; que.push(x);
while( !que.empty() ) {
int f = que.front(); que.pop();
for(int i=0;i<n;i++)
if( a[f][i] && d[f] + 1 < d[i] ) {
d[i] = d[f] + 1, que.push(i);
}
}
}
vector<string>ans;
vector<string>construct(vector<int>d0, vector<int>d1) {
ans.clear(), n = d0.size();
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if( i != j && abs(d0[i] - d0[j]) <= 1 && abs(d1[i] - d1[j]) <= 1 )
a[i][j] = 1;
bool flag = true;
bfs(0);
for(int i=0;i<n;i++)
if( d[i] != d0[i] )
flag = false;
if( !flag ) return ans;
bfs(1);
for(int i=0;i<n;i++)
if( d[i] != d1[i] )
flag = false;
if( !flag ) return ans;
for(int i=0;i<n;i++) {
string s = "";
for(int j=0;j<n;j++)
if( a[i][j] ) s = s + 'Y';
else s = s + 'N';
ans.push_back(s);
}
return ans;
}
};
@details@
好像。。。也没什么细节。。。
@topcoder - 2017TCOAlgorithmRound2A - D1L2@ DistanceZeroAndOne的更多相关文章
- @topcoder - TCO19 Regional Wildcard Wildcard Round - D1L2@ Diophantine
目录 @description@ @solution@ @accepted code@ @details@ @description@ 令 p[] 为质数序列:p[0] = 2, p[1] = 3, ...
- Topcoder几例C++字符串应用
本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...
- TopCoder kawigiEdit插件配置
kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...
- 记第一次TopCoder, 练习SRM 583 div2 250
今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...
- TopCoder比赛总结表
TopCoder 250 500 ...
- TopCoder
在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- 求拓扑排序的数量,例题 topcoder srm 654 div2 500
周赛时遇到的一道比较有意思的题目: Problem Statement There are N rooms in Maki's new house. The rooms are number ...
- TopCoder SRM 590
第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement Fox Ciel is going to play Gomoku with her friend ...
随机推荐
- LINQ(语言集成查询)
LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作 ...
- Python执行时间的计算方法小结
Python执行时间的计算方法小结 首先说一下我遇到的坑,生产上遇到的问题,我调度Python脚本执行并监控这个进程,python脚本运行时间远远大于python脚本中自己统计的程序执行时间. 监控p ...
- 模板方法(Template Method)(父类声明算法骨架,子类具体不同实现)
在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...
- BIRT简介
BIRT(Business Intelligence and Reporting Tools,商业智能和报告工具,曾被安讯公司中国分公司译作百灵)项目是一个开源软件项目,其为富客户端应用和Web应用程 ...
- 2019-9-2-C#判断文件是否被混淆
title author date CreateTime categories C#判断文件是否被混淆 lindexi 2019-09-02 12:57:37 +0800 2018-2-13 17:2 ...
- Js Array 删除
数组删除操作 Array.prototype.inArray = function (e) {for (i = 0; i < this.length; i++) {if (this[i] == ...
- 缺氧debug模式开启及功能
在游戏OxygenNotIncluded_Data文件夹创建一个debug_enable.txt的空文本文档 在缺氧目录下添加debug_enable.txt文件 按删除键就可以开启debug模式 需 ...
- js的各种获取大小
相信大家也经常会被js的获取大小搞得头昏脑胀,到底应该用哪种方式获取才是我要的那种大小呢 好啦,在此我帮大家整理好我知道的那些. window.screen.availHeight 获取的是当前电脑 ...
- 问题解决:listview多次调用addHeaderView和addFooterView
情景: 有两个分类,每个分类下的数据用listview显示,分类1需要显示头视图和尾视图,分类2不要显示头视图和尾视图 .两个分类可以来回切换. 实现的步骤: 1. addHeaderView . a ...
- ACdream 1007 (快速幂)
题目链接 a + b Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Problem D ...