链接:https://ac.nowcoder.com/acm/contest/3007/I
来源:牛客网

题目描述

小 Q 所在的国家有 N 个城市,城市间由 N-1 条双向道路连接,任意一对城市都是互通的。
每条道路有一个长度,自然,小 Q 的导航系统能显示每对城市间的最短距离。
但是小 Q 对这个系统并不太放心,于是他向你求助:
给定每对城市间的最短距离,你要判断距离表是否一定有误。
如果这张距离表是自洽的,那么请你按升序依次给出每条道路的长度。
对于全部的数据,1≤N≤500,输入的所有数字都是不超过 109 的非负整数。

输入描述:

第一行一个数字 N
接下来 N 行,每行 N 个正整数
第 i 行第 j 列的数字表示城市 i 和城市 j 间的最短距离
保证第 i 行第 i 列的数字为 0

输出描述:

第一行,一个字符串
如果距离表没有问题,输出“Yes”
并在接下来的 N-1 行从小到大给出每条道路的长度
否则输出“No”即可
示例1

输入

复制 3
0 1 2
1 0 1
2 1 0

3
0 1 2
1 0 1
2 1 0

输出

复制 Yes
1
1

Yes
1
1
示例2

输入

复制 3
0 1 1
1 0 1
1 1 0

3
0 1 1
1 0 1
1 1 0

输出

复制 No

No

题解 

   跑一遍MST得出道路长度长,跑一遍Floyd处理出任意两点间距离并与导航给出的距离对比

CODE

 #include <bits/stdc++.h>
#define dbg(x) cout << #x << "=" << x << endl
#define eps 1e-8
#define pi acos(-1.0) using namespace std;
typedef long long LL; template<class T>inline void read(T &res)
{
char c;T flag=;
while((c=getchar())<''||c>'')if(c=='-')flag=-;res=c-'';
while((c=getchar())>=''&&c<='')res=res*+c-'';res*=flag;
} namespace _buff {
const size_t BUFF = << ;
char ibuf[BUFF], *ib = ibuf, *ie = ibuf;
char getc() {
if (ib == ie) {
ib = ibuf;
ie = ibuf + fread(ibuf, , BUFF, stdin);
}
return ib == ie ? - : *ib++;
}
} int qread() {
using namespace _buff;
int ret = ;
bool pos = true;
char c = getc();
for (; (c < '' || c > '') && c != '-'; c = getc()) {
assert(~c);
}
if (c == '-') {
pos = false;
c = getc();
}
for (; c >= '' && c <= ''; c = getc()) {
ret = (ret << ) + (ret << ) + (c ^ );
}
return pos ? ret : -ret;
} const int maxn = ; struct node
{
int u,v,w;
}e[maxn*maxn]; int fa[maxn];
LL g[maxn][maxn];
LL dis[maxn][maxn]; int tot[maxn]; int fid(int x)
{
return fa[x]==x ? x : fa[x] = fid(fa[x]);
} bool cmp(node a,node b)
{
return a.w < b.w;
} int main()
{
int n;
int num=,x,sum=;
read(n);
for(int i = ; i <= n; ++i) {
for(int j = ; j <= n; ++j) {
read(x);
g[i][j] = x;
if(i != j)
{
e[++num].w=x;
e[num].u=i;
e[num].v=j;
}
}
}
sort(e+,e+num+,cmp);
for(int i = ; i <= n; ++i) {
for(int j = ; j <= n; ++j) {
if(i == j) dis[i][j] = ;
else dis[i][j] = 1e18;
}
}
for(int i = ; i <= n; ++i) {
fa[i] = i;
}
int u,v;
for(int i = ;i <= num; ++i) {
u = e[i].u;
v = e[i].v;
if(fid(u)!=fid(v))
{
dis[u][v] = dis[v][u] = e[i].w;
tot[++sum] = e[i].w;
fa[fa[u]] = fa[v];
}
}
for(int k = ; k <= n; ++k) {
for(int i = ; i <= n; ++i) {
for(int j = ; j <= n; ++j) {
dis[i][j] = min(dis[i][j], dis[i][k]+dis[k][j]);
}
}
}
for(int i = ; i <= n; ++i) {
for(int j = ; j <= n; ++j) {
if(dis[i][j] != g[i][j]) {
printf("No");
return ;
}
}
}
printf("Yes\n");
sort(tot+,tot+n);
for(int i = ; i < n; ++i) {
printf("%d\n",tot[i]);
}
}

牛客寒假6-I 导航系统的更多相关文章

  1. 2020牛客寒假算法基础集训营2 J题可以回顾回顾

    2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...

  2. 2020牛客寒假算法基础集训营1 J题可以回顾回顾

    2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...

  3. 欧拉函数-gcd-快速幂(牛客寒假算法基础集训营1-D-小a与黄金街道)

    题目描述: 链接:https://ac.nowcoder.com/acm/contest/317/D来源:牛客网小a和小b来到了一条布满了黄金的街道上.它们想要带几块黄金回去,然而这里的城管担心他们拿 ...

  4. Applese 的毒气炸弹 G 牛客寒假算法基础集训营4(图论+最小生成树)

    链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 Applese 的毒气炸弹 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262 ...

  5. 牛客寒假算法基础集训营3处女座和小姐姐(三) (数位dp)

    链接:https://ac.nowcoder.com/acm/contest/329/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...

  6. 牛客寒假算法基础集训营3B 处女座的比赛资格(用拓扑排序解决DAG中的最短路)

    链接:https://ac.nowcoder.com/acm/contest/329/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  7. 牛客寒假算法基础训练集中营4 E题 Applese 涂颜色

    链接:https://ac.nowcoder.com/acm/contest/330/E 来源:牛客网 题目描述 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列 ...

  8. 牛客寒假算法基础集训营4 I题 Applese 的回文串

    链接:https://ac.nowcoder.com/acm/contest/330/I 来源:牛客网 自从 Applese 学会了字符串之后,精通各种字符串算法,比如--判断一个字符串是不是回文串. ...

  9. 牛客寒假算法基础集训营4 F Applese 的大奖

    链接:https://ac.nowcoder.com/acm/contest/330/H来源:牛客网 Applese 和它的小伙伴参加了一个促销的抽奖活动,活动的规则如下:有一个随机数生成器,能等概率 ...

随机推荐

  1. PYTHON 学习笔记1 PYTHON 入门 搭建环境与基本类型

    简介 Python,当然大家听到这个名词不再是有关于像JAVA 一样的关于后台,我们学习Python 的目的在于对于以后数据分析和机器学习AI 奠定基础,Python 在数据分析这一块,可谓是有较好的 ...

  2. NR / 5G - W-OFDM

  3. vue的组件传值

    1.父组件向子组件传值 父组件: 123456789101112 <template> <child :name="name"></child> ...

  4. oracle-11g-R2监听文件配置

    客户端连接oracle数据库时出现如下错误: Listener refused the connection with the following error: ORA-, TNS:listener ...

  5. StarUML之三、StarUML的项目

    1:创建空的项目 创建项目可以按Ctrl+N或选择菜单File| New,StarUML安装打开后默认会有个空项目结构. 2:创建模板项目 可以通过选择模板来启动建模项目(会根据模板创建项目结构). ...

  6. Android中点击按钮获取string.xml中内容并弹窗提示

    场景 AndroidStudio跑起来第一个App时新手遇到的那些坑: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103797 ...

  7. webStorm 2019 激活码,phpStorm 2019激活,idea激活,pyCharm激活【永久使用】

    [2020-01-16 亲测可用] 无废话版!----直接激活 [麻烦激活后,在评论发表:eg:2020-01-11 09:00 测试可用],有问题直接反馈 我及时修改,建议收藏此博客 都能永久激活, ...

  8. Django 表关系的创建

    Django 表关系的创建 我们知道,表关系分为一对多,多对多,一对一 我们以一个图书管理系统为背景,设计了下述四张表,让我们来找一找它们之间的关系 Book与Publish表 找关系:一对多 左表( ...

  9. python-20-迭代器是个什么东西?

    前言 迭代器.生成器.装饰器都有一个“器”,但他们之间没有什么关系. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有两个基本的方法:iter()  ...

  10. PHP0020:PHP 单文件上传 多文件上传