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条边. 问枚举每条边,问你加这条边的前提下组成生成树的权值最小的树的权值和是多少. 先求 ...
随机推荐
- className.class.getResourceAsStream与ClassLoader.getSystemResourceAsStream区别
className.class.getResourceAsStream : 一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件conf ...
- access登录窗口校验代码一
Private Sub login_Click()If IsNull(Me.username) ThenMsgBox "请输入用户名!", vbExclamationElseIf ...
- Java反射之修改常量值
1. 通过反射修改常量的值 package com.blueStarWei.invoke; import java.lang.reflect.Field; public class ModifyFin ...
- nginx简单安装设置
1.Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二 ...
- hadoop_eclipse及HDT插件的使用
Hadoop Development Tools (HDT)是开发hadoop应用的eclipse插件,http://hdt.incubator.apache.org/介绍了其特点,安装,使用等,针对 ...
- Install OpenCV 3.0 and Python 2.7+ on OSX
http://www.pyimagesearch.com/2015/06/15/install-OpenCV-3-0-and-Python-2-7-on-osx/ As I mentioned las ...
- Angularjs Post传值后台收不到的原因
如果你给AngularJS的post方法的data参数创一个key-value对象,那传给后台服务的就是JSON字符串,而正常的POST解析是需要像get?后面的那种&name=value这样 ...
- laravel项目使用twemproxy部署redis集群
twemproxy是twitter开发的一个redis代理proxy,Twemproxy可以把多台redis server当作一台使用,开发人员通过twemproxy访问这些redis servers ...
- JSON数据Key排序
/// <summary> /// JSON格式化重新排序 /// </summary> /// <param name="jobj">原始JS ...
- JavaScript高级程序设计(二)
一.函数 1.1 JS中函数无重载,同一作用域下定义两个函数,而不会引发错误,但真正调用的是后面定义的函数.例如: function doAdd(iNum){ alert(iNum+100); } f ...