题目大意:给出一个图中点的两两距离,问是否是一棵树,若是,求出平均边权最大的点

prim最小生成树,若原图是树,则最小生成树的距离就是原距离。否则不是。

搞出来树了,第二问随便dfs就好了。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#define N 2550
using namespace std;
int T,n,fa[N],pp[N];
long long dis[N][N],minn[N],a[N][N],ans,num;
bool boo;
double maxn;
int final;
int head[N],e=1;
struct edge{
int u,v,w,next;
}ed[2*N];
void add(int u,int v,int w){
ed[e].u=u; ed[e].v=v; ed[e].w=w;
ed[e].next=head[u]; head[u]=e++;
}
bool bo[N];
void dfs(int x,int now,long long d){
if(bo[now])return;
bo[now]=1;
dis[x][now]=d;
for(int i=head[now];i;i=ed[i].next)
dfs(x,ed[i].v,d+ed[i].w);
}
int main()
{
//freopen("treas.in","r",stdin);
//freopen("treas.out","w",stdout);
scanf("%d",&T);
while(T--){
memset(head,0,sizeof head); e=1;
memset(bo,0,sizeof bo);
memset(minn,0x7f,sizeof minn);
scanf("%d",&n); boo=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%lld",&a[i][j]);
for(int i=1;i<=n;i++){
minn[i]=a[1][i];
pp[i]=1;
}
bo[1]=1; fa[1]=0;
for(int i=1;i<n;i++)
{
int now=0;
for(int j=1;j<=n;j++)
if(!bo[j]&&minn[j]<minn[now])
now=j;
bo[now]=1; fa[now]=pp[now];
add(pp[now],now,a[pp[now]][now]);
add(now,pp[now],a[now][pp[now]]);
for(int j=1;j<=n;j++)
if(!bo[j]&&a[now][j]<minn[j]){
minn[j]=a[now][j];
pp[j]=now;
}
}
//for(int i=1;i<=n;i++)
//printf("%d %d\n",i,fa[i]);
for(int i=1;i<=n;i++){
memset(bo,0,sizeof(bo));
dfs(i,i,0);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
//printf("%lld ",dis[i][j]);
if(a[i][j]!=dis[i][j]){
boo=1; break;
}
}if(boo==1) break;
//printf("\n");
}if(boo==1){printf("No\n"); continue;}
maxn=0; final=1;
for(int i=1;i<=n;i++){
num=ans=0;
for(int j=head[i];j;j=ed[j].next){
num++;
ans+=ed[j].w;
}
if((double)(1.0*ans)/(1.0*num)>maxn){
final=i;
maxn=(double)(1.0*ans)/(1.0*num);
}
}
printf("Yes\n%d\n",final);
}
}

codeForces 472D 最小生成树的更多相关文章

  1. Xor-MST CodeForces - 888G (最小生成树,分治)

    大意: n结点无向完全图, 给定每个点的点权, 边权为两端点异或值, 求最小生成树

  2. Codeforces 472D

    看官方题解提供的是最小生成树,怎么也想不明确.you can guess and prove it! 看了好几个人的代码.感觉实现思路全都不一样,不得不佩服cf题目想法的多样性 以下说说我自己的理解, ...

  3. Mobile Phone Network CodeForces - 1023F (最小生成树)

    大意: 无向图, 其中k条边是你的, 边权待定, m条边是你对手的, 边权已知. 求如何设置边权能使最小生成树中, 你的边全被选到, 且你的边的边权和最大. 若有多棵最小生成树优先取你的边. 先将$k ...

  4. The Shortest Statement CodeForces - 1051F 最小生成树+并查集+LCA

    题目描述 You are given a weighed undirected connected graph, consisting of n vertices and mm edges. You ...

  5. Abandoning Roads CodeForces - 1149D (最小生成树)

    大意: 给定无向图, 边权只有两种, 对于每个点$x$, 输出所有最小生成树中, 点$1$到$x$的最短距离. 先将边权为$a$的边合并, 考虑添加边权为$b$的边. 每条路径只能经过每个连通块一次, ...

  6. ACM第一阶段学习内容

    一.知识目录 字符串处理 ................................................................. 3 1.KMP 算法 .......... ...

  7. codeforces472D

    Design Tutorial: Inverse the Problem CodeForces - 472D 给你了一个 n × n最短距离矩阵.(即矩阵中dis[u][v]为u点到v点的最短距离), ...

  8. 正睿OI国庆DAY2:图论专题

    正睿OI国庆DAY2:图论专题 dfs/例题 判断无向图之间是否存在至少三条点不相交的简单路径 一个想法是最大流(后来说可以做,但是是多项式时间做法 旁边GavinZheng神仙在谈最小生成树 陈主力 ...

  9. Educational Codeforces Round 3 E. Minimum spanning tree for each edge (最小生成树+树链剖分)

    题目链接:http://codeforces.com/contest/609/problem/E 给你n个点,m条边. 问枚举每条边,问你加这条边的前提下组成生成树的权值最小的树的权值和是多少. 先求 ...

随机推荐

  1. python 定时服务模块

    python定时任务使用方法如下: import sched shelder = sched.scheduler(time.time, time.sleep) shelder.enter(2, 0, ...

  2. WebLogic SSRF

    本文主要记录一下Weblogic SSRF 利用的操作过程. 一.WebLogic SSRF漏洞简介 漏洞编号:CVE-2014-4210 漏洞影响: 版本10.0.2,10.3.6 Oracle W ...

  3. 0510JS运算符

    |-运算符|--基础运算符 + - * / %|----加号:数字的求和.字符串的拼接|----减号:数字的减法.对数字取反|----乘法.除法.取余 var a = 10; var b = 10; ...

  4. bestcoder round 74 div2

    随便看了一场以前的bestcoder,然后顺便写了一下,都不码的样子 有中文题面,这里就不写题目大意了 T1. 刚开始想复杂了,T1可能是4道题里面想的最久的 我们大概弄一下就可以发现,如果a[i]& ...

  5. CSS中的背景、雪碧图、超链接的伪类样式

    一.背景 1.背景颜色 background-color: red; 2.背景图片 background-image: url("../../img/l1.png"); 3.图片填 ...

  6. TX2 安装 ROS 依赖库错误解决办法

    一.更换ubuntu 16.04 更新源 1. 更新源 deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse rest ...

  7. Spring 的IOC和AOP总结

    Spring 的IOC和AOP IOC 1.IOC 许多应用都是通过彼此间的相互合作来实现业务逻辑的,如类A要调用类B的方法,以前我们都是在类A中,通过自身new一个类B,然后在调用类B的方法,现在我 ...

  8. 去重是distinct还是group by?

    distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计. 单纯的去重操作使用di ...

  9. linux下Clang和gcc的区别

    Clang 比 GCC 编译器的优势: 编译速度更快 编译产出更小 出错提示更友 好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 . 内置有静态分析工具 ...

  10. maven使用与技巧

    1.Pom文件介绍与基本组成 说明:全称是Project Object Model,通俗点的话说就是要对构建的项目进行建模. 组成的基本元素: 元素 描述 modelVersion 超级pom版本 g ...