Codeforces Round #270 D Design Tutorial: Inverse the Problem --MST + DFS
题意:给出一个距离矩阵,问是不是一颗正确的带权树。
解法:先按找距离矩阵建一颗最小生成树,因为给出的距离都是最短的点间距离,然后再对每个点跑dfs得出应该的dis[][],再对比dis和原来的mp是否一致即可。
首先还要判断一些东西。具体看代码吧。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <string> #include <vector> using namespace std; #define N 2007 struct Edge { int u,v,w; }edge[N*N]; int a[N][N],fa[N],dis[N][N]; vector<pair<int,int> > G[N]; int cmp(Edge ka,Edge kb) { return ka.w < kb.w; } int findset(int x) { if(x != fa[x]) fa[x] = findset(fa[x]); return fa[x]; } void dfs(int u,int fa,int ori) { for(int i=0;i<G[u].size();i++) { int v = G[u][i].first; if(v == fa) continue; dis[ori][v] = dis[ori][u] + G[u][i].second; dfs(v,u,ori); } } int main() { int n,i,j; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%I64d",&a[i][j]); int tag = 1; for(i=1;i<=n;i++) { fa[i] = i; for(j=1;j<=n;j++) { if((i == j && a[i][j] != 0)||(i != j && a[i][j] == 0)||(a[i][j] != a[j][i])) { tag = 0; break; } } if(!tag) break; } if(!tag) { puts("NO"); continue; } int tot = 0; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) edge[tot].u = i, edge[tot].v = j,edge[tot++].w = a[i][j]; sort(edge,edge+tot,cmp); for(i=0;i<tot;i++) { int u = edge[i].u, v = edge[i].v, w = edge[i].w; int fx = findset(u), fy = findset(v); if(fx != fy) { G[u].push_back(make_pair(v,w)); G[v].push_back(make_pair(u,w)); fa[fx] = fy; } } for(i=1;i<=n;i++) { dis[i][i] = 0; dfs(i,0,i); for(j=1;j<=n;j++) { if(a[i][j] != dis[i][j]) { tag = 0; break; } } if(!tag) break; } if(!tag) puts("NO"); else puts("YES"); } return 0; }
作者:whatbeg
出处1:http://whatbeg.com/
出处2:http://www.cnblogs.com/whatbeg/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
更多精彩文章抢先看?详见我的独立博客: whatbeg.com
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥