codeForces 472D 最小生成树
题目大意:给出一个图中点的两两距离,问是否是一棵树,若是,求出平均边权最大的点
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 最小生成树的更多相关文章
- Xor-MST CodeForces - 888G (最小生成树,分治)
大意: n结点无向完全图, 给定每个点的点权, 边权为两端点异或值, 求最小生成树
- Codeforces 472D
看官方题解提供的是最小生成树,怎么也想不明确.you can guess and prove it! 看了好几个人的代码.感觉实现思路全都不一样,不得不佩服cf题目想法的多样性 以下说说我自己的理解, ...
- Mobile Phone Network CodeForces - 1023F (最小生成树)
大意: 无向图, 其中k条边是你的, 边权待定, m条边是你对手的, 边权已知. 求如何设置边权能使最小生成树中, 你的边全被选到, 且你的边的边权和最大. 若有多棵最小生成树优先取你的边. 先将$k ...
- The Shortest Statement CodeForces - 1051F 最小生成树+并查集+LCA
题目描述 You are given a weighed undirected connected graph, consisting of n vertices and mm edges. You ...
- Abandoning Roads CodeForces - 1149D (最小生成树)
大意: 给定无向图, 边权只有两种, 对于每个点$x$, 输出所有最小生成树中, 点$1$到$x$的最短距离. 先将边权为$a$的边合并, 考虑添加边权为$b$的边. 每条路径只能经过每个连通块一次, ...
- ACM第一阶段学习内容
一.知识目录 字符串处理 ................................................................. 3 1.KMP 算法 .......... ...
- codeforces472D
Design Tutorial: Inverse the Problem CodeForces - 472D 给你了一个 n × n最短距离矩阵.(即矩阵中dis[u][v]为u点到v点的最短距离), ...
- 正睿OI国庆DAY2:图论专题
正睿OI国庆DAY2:图论专题 dfs/例题 判断无向图之间是否存在至少三条点不相交的简单路径 一个想法是最大流(后来说可以做,但是是多项式时间做法 旁边GavinZheng神仙在谈最小生成树 陈主力 ...
- Educational Codeforces Round 3 E. Minimum spanning tree for each edge (最小生成树+树链剖分)
题目链接:http://codeforces.com/contest/609/problem/E 给你n个点,m条边. 问枚举每条边,问你加这条边的前提下组成生成树的权值最小的树的权值和是多少. 先求 ...
随机推荐
- ES6中Promise详解
Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统一的 AP ...
- Django处理流程
用户通过浏览器发送请求 请求到达request中间件,中间件对request请求做预处理或者直接返回response 若未返回response,会到达urlconf路由,找到对应视图函数 视图函数做相 ...
- app ionic1 微信 微博 分享功能的实现
微信分享 1.登录微信开放平台注册账户 2.创建一个移动应用 (app) 审核过后会有一个appid 之后安装插件的时候会用到 3.在这个应用上面填写 包名 和 签名 就可以了 包名和签名的 ...
- 项目中Orcale存储过程优化记录
今天对之前写的Orcale存储过程做了一些优化,使其变得更加灵活,之前写的存储过程是使用游标存储SQL执行结果,但是使用游标带来的弊端是,在声明时,它所执行的SQL就已经被写死,无法修改.若想更加灵活 ...
- Tomcat的缺省是多少,怎么修改
Tomcat的缺省端口号是8080. 修改Tomcat端口号: 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 ...
- 基类包括字段“ScriptManager1”,但其类型(System.Web.UI.ScriptManager)与控件(System.Web.UI.ScriptManager)的类型不兼容
首先说下原先的情况,就是原本老项目的Web解决方案是使用.net framework 2.0的老版本, 所以机器也安装过Microsoft ASP.NET 2.0 AJAX Extensions..A ...
- PHP session有效期session.gc_maxlifetime详解
一个已知管用的方法是,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储到数据库,这样可以通过SQL语句来删除所有过期的sessio ...
- Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析
1.简介 在分析完AbstractQueuedSynchronizer(以下简称 AQS)和ReentrantLock的原理后,本文将分析 java.util.concurrent 包下的两个线程同步 ...
- Maven管理多模块应用
穿越至目录: 从0开始,构建前后端分离应用 对于概念的一些理解 Maven的作用 管理模块之间的依赖:根据业务需求,系统会划分很多模块,这些模块彼此之间存在着依赖关系.比如系统管理模块依赖着文件上传模 ...
- Golang 交叉编译 window/linux 文件
gox - 一款简单的交叉编译工具 下载地址:https://github.com/mitchellh/gox 使用 go get 命令安装: go get github.com/mitchellh/ ...