codeForces 472D 最小生成树
来源:互联网 发布:处理器加速优化 编辑:程序博客网 时间:2024/06/07 11:09
题目大意:给出一个图中点的两两距离,问是否是一棵树,若是,求出平均边权最大的点
prim最小生成树,若原图是树,则最小生成树的距离就是原距离。否则不是。
搞出来树了,第二问随便dfs就好了。
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#define N 2550using 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); }}
阅读全文
0 0
- codeForces 472D 最小生成树
- 最小生成树(kruskal)Codeforces 472D
- Codeforces 827 D 最小生成树+倍增 解题报告
- CodeForces 472D Design Tutorial: Inverse the Problem (最小生成树)
- CodeForces 472D Design Tutorial: Inverse the Problem (最小生成树+lca)
- codeforces 606D. Lazy Student(#335 逆最小生成树)
- Codeforces Round #335 (Div. 2) 606D Lazy Student(最小生成树+stl)
- Codeforces Round 335 (Div 2) D. Lazy Student【构造 脑洞 最小生成树】
- Codeforces Round #270 D 最小生成树(并查集)+DFS
- Codeforces 606 D Lazy Student【逆最小生成树+思维】好题
- CodeForces 827D Round #423 Div2F&Div1D:LCA+路径压缩+MST(最小生成树)
- 校内赛 codeforces 827D【最小生成树】【树链剖分】 解题报告
- CodeForces 827D 浅谈最小生成树性质解析及题目性质分析
- Codeforces 827D Best Edge Weight (最小生成树 + 树链剖分/倍增/并查集)
- codeforces 76A Gift 最小生成树
- 【Codeforces 609E】【Stree】【最小生成树】
- 【最小生成树】Codeforces 707B Bakery
- codeforces 707BBakery(最小生成树)
- ubuntu 安装smb 服务器
- HDU 1495 非常可乐(BFS||数论)
- Linux unzip命令
- Dockerfile使用说明
- hdu6047--Maximum Sequence
- codeForces 472D 最小生成树
- uva 1152 二分查找+中途相遇法
- 使用CleanMymac清理电脑安全吗?
- jQuery实现年月日的联动功能
- 【AtCoder】 Grand Contest 018 C
- centos php添加pgsql扩展
- truffle webpack下localhost能够访问,而IP地址无法访问的解决方法
- linux系统下实现文件拷贝
- 阿里巴巴智能操作系统YunOS 6 系统发布