[BZOJ3528][Zjoi2014][数学]星系调查

浙江省选ZJOI2014试题、数据及标程 立即下载

上一发大神的推导
这里写图片描述
这里写图片描述

后面代入求根公式就行。
因为数据只有M=N或M=N-1两种情况,所以这张图要不是一棵树要不只有一个环,是一棵树的情况很好考虑,有一个环的话要分类讨论。

感觉ZJOI2014DAY1的题代码都好长,然而杜教AK了…….

感觉这张图上一坨水印看着不爽,不知道怎么去……

#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <iostream>
#define N 100010

using namespace std;

typedef long long ll;

int n,m,q,cnt,u,v,l,Root,ccnt;
int G[N],X[N],Y[N],dpt[N],sta[N],tp,V[N],inC[N],onT[N],r[N];
int fa[N][30];
ll sgx[N],sgy[N],sgx_2[N],sgy_2[N],sgxy[N];
ll csgx,csgy,csgx_2,csgy_2,csgxy;
double A,B,C;

struct edge{
    int t,nx;
}E[N<<2];

inline char gc(){
    static char buf[100000],*p1=buf,*p2=buf;
    if(p1==p2){
        p2=(p1=buf)+fread(buf,1,100000,stdin);
        if(p1==p2) return EOF;
    }
    return *p1++;
}

inline void reaD(int &x){
    char Ch=gc();x=0;
    for(;Ch>'9'||Ch<'0';Ch=gc());
    for(;Ch>='0'&&Ch<='9';x=x*10+Ch-'0',Ch=gc());
}

inline void InserT(int x,int y){
    E[++cnt].t=y;E[cnt].nx=G[x];G[x]=cnt;
    E[++cnt].t=x;E[cnt].nx=G[y];G[y]=cnt;
}

void dfs_t(int x,int f,int flg=0){
    onT[x]=flg;
    dpt[x]=dpt[f]+1;fa[x][0]=f;
    sgxy[x]=sgxy[f]+X[x]*Y[x];
    sgx[x]=sgx[f]+X[x],sgy[x]=sgy[f]+Y[x];
    sgx_2[x]=sgx_2[f]+X[x]*X[x],sgy_2[x]=sgy_2[f]+Y[x]*Y[x];
    for(int i=1;i<=20;i++) fa[x][i]=fa[fa[x][i-1]][i-1];
    for(int i=G[x];i;i=E[i].nx)
        if(E[i].t!=f&&!inC[E[i].t]) dfs_t(E[i].t,x,flg);
}

void dfs_g(int x,int f){
    V[x]=1;
    dpt[x]=dpt[f]+1;
    sgxy[x]=sgxy[f]+X[x]*Y[x];
    sgx[x]=sgx[f]+X[x],sgy[x]=sgy[f]+Y[x];
    sgx_2[x]=sgx_2[f]+X[x]*X[x],sgy_2[x]=sgy_2[f]+Y[x]*Y[x];
    for(int i=G[x];i;i=E[i].nx)
        if(E[i].t!=f&&inC[E[i].t]&&!V[E[i].t]) dfs_g(E[i].t,x);
}

inline void swap(int &x,int &y){
    int z=x;x=y;y=z;
}

int lca(int x,int y){
    if(dpt[x]<dpt[y]) swap(x,y);
    for(int i=20;~i;i--)
        if(dpt[fa[x][i]]>=dpt[y]) x=fa[x][i];
    if(x==y) return x;
    for(int i=20;~i;i--)
        if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
    return fa[x][0];
}

void Calc_t(int u,int v){
    l=lca(u,v);
    ll nn=dpt[u]+dpt[v]-2*dpt[l]+1,_sgx=sgx[u]+sgx[v]-2*sgx[l]+X[l],_sgy=sgy[u]+sgy[v]-2*sgy[l]+Y[l],
       _sgx_2=sgx_2[u]+sgx_2[v]-2*sgx_2[l]+X[l]*X[l],_sgy_2=sgy_2[u]+sgy_2[v]-2*sgy_2[l]+Y[l]*Y[l],_sgxy=sgxy[u]+sgxy[v]-2*sgxy[l]+Y[l]*X[l];
    double _x=(double)_sgy/nn,_y=(double)_sgx/nn;
    A=nn*_y*_y-2*_y*_sgx+_sgx_2;
    B=2*_x*_sgx-2*nn*_x*_y+2*_y*_sgy-2*_sgxy;
    C=nn*_x*_x-2*_x*_sgy+_sgy_2;
    printf("%.5lf\n",(A+C-sqrt((A-C)*(A-C)+B*B))/2.0+1e-7);
}

void Calc_c(int u,int v){
    if(dpt[u]<dpt[v]) swap(u,v);
    ll nn=dpt[u]-dpt[v]+1,_sgx=sgx[u]-sgx[v]+X[v],_sgy=sgy[u]-sgy[v]+Y[v],
       _sgx_2=sgx_2[u]-sgx_2[v]+X[v]*X[v],_sgy_2=sgy_2[u]-sgy_2[v]+Y[v]*Y[v],_sgxy=sgxy[u]-sgxy[v]+Y[v]*X[v];
    double _x=(double)_sgy/nn,_y=(double)_sgx/nn,Ans;
    A=nn*_y*_y-2*_y*_sgx+_sgx_2;
    B=2*_x*_sgx-2*nn*_x*_y+2*_y*_sgy-2*_sgxy;
    C=nn*_x*_x-2*_x*_sgy+_sgy_2;
    Ans=(A+C-sqrt((A-C)*(A-C)+B*B))/2.0;
    nn=ccnt-nn+2,_sgx=csgx-_sgx+X[u]+X[v],_sgy=csgy-_sgy+Y[u]+Y[v],_sgx_2=csgx_2-_sgx_2+X[u]*X[u]+X[v]*X[v],_sgy_2=csgy_2-_sgy_2+Y[u]*Y[u]+Y[v]*Y[v];_sgxy=csgxy-_sgxy+X[u]*Y[u]+X[v]*Y[v];
    _x=(double)_sgy/nn,_y=(double)_sgx/nn,Ans;
    A=nn*_y*_y-2*_y*_sgx+_sgx_2;
    B=2*_x*_sgx-2*nn*_x*_y+2*_y*_sgy-2*_sgxy;
    C=nn*_x*_x-2*_x*_sgy+_sgy_2;
    printf("%.5lf\n",min((A+C-sqrt((A-C)*(A-C)+B*B))/2.0,Ans)+1e-7);
}

void Calc_t_c(int u,int v){
    ll n=0,sgx1=0,sgy1=0,sgx21=0,sgy21=0,sgxy1=0;
    if(onT[u]) n=dpt[u],sgx1=sgx[u],sgy1=sgy[u],sgx21=sgx_2[u],sgy21=sgy_2[u],sgxy1=sgxy[u],u=r[onT[u]];
    if(onT[v]) n+=dpt[v],sgx1+=sgx[v],sgy1+=sgy[v],sgx21+=sgx_2[v],sgy21+=sgy_2[v],sgxy1+=sgxy[v],v=r[onT[v]];

    if(dpt[u]<dpt[v]) swap(u,v);
    ll nn=dpt[u]-dpt[v]+1,_sgx=sgx[u]-sgx[v]+X[v],_sgy=sgy[u]-sgy[v]+Y[v],
       _sgx_2=sgx_2[u]-sgx_2[v]+X[v]*X[v],_sgy_2=sgy_2[u]-sgy_2[v]+Y[v]*Y[v],_sgxy=sgxy[u]-sgxy[v]+Y[v]*X[v];
    double _x=(double)(_sgy+sgy1)/(nn+n),_y=(double)(_sgx+sgx1)/(nn+n),Ans;
    A=(nn+n)*_y*_y-2*_y*(_sgx+sgx1)+(_sgx_2+sgx21);
    B=2*_x*(_sgx+sgx1)-2*(nn+n)*_x*_y+2*_y*(_sgy+sgy1)-2*(_sgxy+sgxy1);
    C=(nn+n)*_x*_x-2*_x*(_sgy+sgy1)+(_sgy_2+sgy21);
    Ans=(A+C-sqrt((A-C)*(A-C)+B*B))/2.0;
    nn=ccnt-nn+2,_sgx=csgx-_sgx+X[u]+X[v],_sgy=csgy-_sgy+Y[u]+Y[v],_sgx_2=csgx_2-_sgx_2+X[u]*X[u]+X[v]*X[v],_sgy_2=csgy_2-_sgy_2+Y[u]*Y[u]+Y[v]*Y[v];_sgxy=csgxy-_sgxy+X[u]*Y[u]+X[v]*Y[v];
    _x=(double)(_sgy+sgy1)/(nn+n),_y=(double)(_sgx+sgx1)/(nn+n);
    A=(nn+n)*_y*_y-2*_y*(_sgx+sgx1)+(_sgx_2+sgx21);
    B=2*_x*(_sgx+sgx1)-2*(nn+n)*_x*_y+2*_y*(_sgy+sgy1)-2*(_sgxy+sgxy1);
    C=(nn+n)*_x*_x-2*_x*(_sgy+sgy1)+(_sgy_2+sgy21);
    printf("%.5lf\n",min((A+C-sqrt((A-C)*(A-C)+B*B))/2.0,Ans)+1e-7);
}

void WorkOnTree(){
    dfs_t(1,0);
    for(reaD(q);q;q--)
        reaD(u),reaD(v),Calc_t(u,v);
}

bool Getcir(int x,int f){
    if(V[x]){
        while(tp){
            int k=sta[tp--];inC[k]=1;ccnt++;
            csgx+=X[k],csgy+=Y[k],csgx_2+=X[k]*X[k];
            csgy_2+=Y[k]*Y[k],csgxy+=X[k]*Y[k];
            if(k==x) break;
        }
        return true;
    }
    V[x]=1;
    sta[++tp]=x;
    for(int i=G[x];i;i=E[i].nx)
        if(E[i].t!=f){
            if(Getcir(E[i].t,x))return true;
        }else f=0;
    tp--;
    return false;
}

void WorkOnGraph(){
    Getcir(1,0);cnt=0;
    for(int k=1;k<=n;k++)
        if(inC[k])for(int i=G[k];i;i=E[i].nx)
            if(!inC[E[i].t]) dfs_t(E[i].t,0,E[i].t),r[E[i].t]=k;
    memset(V,0,sizeof(V));
    for(int k=1;k<=n;k++)
        if(inC[k]){dfs_g(k,0);Root=k;break;}
    for(reaD(q);q;q--){
        reaD(v);reaD(u);
        if(onT[v]==onT[u]&&!inC[v]&&!inC[u]) Calc_t(u,v);
        else if(inC[v]&&inC[u]) Calc_c(u,v);
        else Calc_t_c(u,v);
    }
}

int main(){
    reaD(n);reaD(m);
    for(int i=1;i<=n;i++) reaD(X[i]),reaD(Y[i]);
    for(int i=1;i<=m;i++) reaD(u),reaD(v),InserT(u,v);
    if(m==n-1) WorkOnTree();
    else WorkOnGraph();
}
【IT小趣闻】免费的DeepSeek是如何赚钱的? 导语:目前很多的通用人工智能也就是所谓的AGI例如文心一言、豆包、通义千问和最近大火的DeepSeek都是免费给普通用户使用的,对开源商业模式不太熟悉的普通人可不太了解这免费背后的商业套路,下面我们就一起来揭秘。开源模式能降低用户信任成本、加速技术普及,而商业化服务则针对企业级需求。DeepSeek 可通过组合上述策略,在服务开发者社区的同时,满足企业客户的深度需求,实现可持续发展。你也看出来了,上边是DeepSeek生成的,讲的还是挺明白的。 阅读详情

相关推荐

FFmpeg魔改指南:让RTMP协议完美兼容H265的三种方法(含SRS适配技巧)

本文详细介绍了三种让RTMP协议兼容H265编码的FFmpeg魔改方案,包括基于官方补丁的标准改造、Intel的SVT-HEVC集成方案以及金山云的自定义扩展方案。文章重点解析了各方案的实现原理与适配技巧,并提供了在SRS 6.0服务器上进行深度配置和性能调优的完整实战指南,帮助开发者解决H265推流至传统RTMP服务器的兼容性问题。

weixin_29290947的博客 194

bzoj 3528: [Zjoi2014]星系调查

这道题目,只要看懂题意,敢于展开,就是一道初中数学好题。       首先设直线为y=kx+b,那么可知答案为Σ(kxi+b-yi)/(k^2+1),展开以后维护若干个东西就可以化简为(Ab^2+(Xk+Y)b+Uk^2+Vk+W)/(k^+1)的形式,其中A>0,那么以b为主元,最小值为(4ac-b^2)/4a,化简一下可以变成Ak^2+Bk+C/(k^2+1)的形式(A,B,C不同于之前的A

lych的博客 1276

大模型蒸馏实战:让小模型获得大模型的知识

本文为初学者提供了一份大模型蒸馏实战指南,通过情感分析任务演示如何将 BERT 的知识迁移到轻量级 TextCNN。文章结合原理图解与 PyTorch 代码,详解软标签生成、温度调节和双损失设计等核心概念,并对比蒸馏前后的性能差异(准确率提升 4.6%,推理速度达 1200 句 / 秒)。内含可直接运行的代码片段、训练技巧及常见问题解答,助力开发者快速掌握模型压缩核心技术,实现工业级部署效率。适合 NLP 入门者学习实践。

1368

bzoj 3528 [ZJOI2014] 星系调查 题解

【原题】 星系调查 【问题描述】 银河历59451年,在银河系有许许多多已被人类殖民的星系。如果想要在行 星系间往来,大家一般使用连接两个行星系的跳跃星门。  一个跳跃星门可以把 物质在它所连接的两个行星系中互相传送。 露露、花花和萱萱被银河系星际联盟调查局任命调查商业巨擘ZeusLeague+ 的不正当商业行为。 在银河系有N个已被ZeusLeague+成功打入市场的行星系,不妨

阿蒋的专栏 2596

【现代电路理论】【2】考尔法设计无源单口网络

夏 弥:其实你在冰面上看到鱼浮上来 明年冬天如果你还在那里,那鱼还是会上来换气 那时候你就可以带一把冰镐 把冰面砸开把鱼捞上来熬汤

痛苦的时候装出幸福相,这不是那么难做到的事 2884

深入解析NPN与PNP传感器驱动电路的设计逻辑与实战应用

本文深入解析NPN与PNP传感器驱动电路的设计逻辑与实战应用,详细对比两者的电流路径差异和电平变化特性。通过实际案例分享电路设计要点,包括上拉电阻选择、保护二极管配置等,并提供工业应用中的选型策略和常见故障排查指南,帮助工程师优化传感器系统集成。

weixin_42561476的博客 468

ZJOI 2014 星系调查(推导)

题意 https://loj.ac/problem/2201 思路 说白了就是一条路径上有 \(n\) 个二维坐标,求一条直线使得所有点到此直线的距离和最小。 设这条直线为 \(y=kx+b\) ,距离和为 \(\delta\)。 \[ \delta=\sum{(kx_i-y_i+b)^2\over k^2+1} \] \[ \delta={k^2\sum x_i^2+\sum y_i^2+nb^...

weixin_30809173的博客 167

YOLOv11改进策略【SPPF】| 将特征金字塔池化修改为:SPPCSPC,提升模型的特征提取能力和计算效率。

本文记录的是。YOLOv7中的SPPCSPC(Spatial Pyramid Pooling Cross Stage Partial Connections)模块是一种结合了(SPP)和(CSP)的改进结构,本文将其添加到YOLOv11中,

Limiiiing的博客 1819

[数学 树 || 环套树] BZOJ 3528 [Zjoi2014]星系调查

瞎扯的题目 直接上大神题解吧 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (

雯舞 663

[Dify] 实现“多知识库切换”功能的最佳实践

知识库切换是提升AI问答系统精准度的关键技术。本文介绍了Dify平台实现多知识库切换的三种方式:静态配置、元数据过滤和动态切换,分析了各自的优缺点。最佳实践建议包括:合理分库设计、意图分类、主库优先检索等。文章还提供了示例工作流程和注意事项,帮助构建更智能、精准的知识驱动型问答系统。通过合理切换知识库,可显著提升回答相关性和系统性能。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 441

执行任务赚积分

接下来N行,每行两个空格分隔的整数(SLA和V),SLA表示任务的最晚处理时间,V表 示任务对应的积分。每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。可用于处理任务的时间有限,请问在有限的时间内,可获得的最多积分。第2个时间单位内,处理任务4,获得5个积分。输入描述:第一行为一个数N,表示有N个任务,1

面试高手的博客 4694

bzoj 3528 [Zjoi2014]星系调查【树链剖分+数学】

参考:https://www.cnblogs.com/zhuohan123/p/3698852.html 首先,根据点到直线距离公式 \[ d=\frac{kx_0-y_0+b}{\sqrt{k^{2}+1}} \] 那么XPs的线性假设相斥度为 \[ \delta =\frac{(kx_i-y_i+b)^{2}}{k^{2}+1} \] //以下部分为参考blog截图: 所以只需要维护\...

weixin_30729609的博客 154

linux内核学习(八)---摄像头框架移植(上)

本章来开始进行摄像头的移植,同时回顾一下V4L2的整个框架

文艺小少年的博客 113

BZOJ3528: [Zjoi2014]星系调查

唉,看到这题直接想起自己的Day1,还是挺难受的,挺傻一题考试的时候怎么就没弄出来呢…… 这两天CP让我给他写个题解,弄了不是很久就把这个题给弄出来了,真不知道考试的时候在干嘛。 明天就出发去北京了,祝自己APIO顺利吧。 1 /************************************************************** 2 Prob...

weixin_34116110的博客 97

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[ZJOI2014] 星系调查(树上差分 + 数学推式子)

rnm退钱,一天天净整些数学,毛都给你揪光

398

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

BZOJ3619: [Zjoi2014]璀灿光华

忽闻今年ZJOI出题人是2014的出题人 吓得我赶快去看一下题目 ZJOI2014可是坑了CSY啊 (捂璀璨光华感觉像是pj组的题目? 建图不难。。。。 然后暴力即可#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<queue> using namespace std;char c

Don't fake it till you made it 2102

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

BZOJ 3527: [Zjoi2014]力

题目地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 题目大意:见原题。 算法讨论:         设A[i]=q[i],B[i]=1/(i^2)。         设C[i]=sigma(A[j]*B[i-j]),D[i]=sigma(A[n-j-1]*B[i-j])。         那么所求的E[i]=C[i]-D

Charlie Pan's Blog 3534

[Codeforces799F] [哈希] Beautiful fountains rows

%%%Manchery给每个区间随机一个权值,这样每个位置被哪些区间覆盖奇数次就可以用区间权值的xor值表示,假设为x,一个区间被哪些区间覆盖也可以用xor值表示,假设为y 那么满足x=y的区间就是符合条件的区间前缀和搞一搞,map记一记就好啦#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #

CE玩家 1493

[Codeforces773E] [线段树] [找规律] Blog Post Rating

题意大概是 有一个博客,初始赞数为0,每个人会浏览这篇博客,如果这个人期望的赞数大于这边博客的赞数,他就会赞这篇博客,如果小于这篇博客,就踩一下(博客赞数-1),相同就不操作。询问对于每个i,1~i的人按照一个顺序浏览,求一种顺序使得博客最后的赞数最大,输出这个最大的赞数。先瞎猜一下,这1~i个人肯定是按照期望的赞数升序访问最优。 然后写个暴力交一下,发现T了,说明这个结论是对的那么只要维护一

CE玩家 1367

[暴力DP][暴力STL]SNOI2017 && LOJ#2256. 英雄联盟

列出DP方程 fi,j=min{fi−1,jk+k×Ci,k|j且k≤Ki }f_{i,j}=min\{ f_{i-1,{j\over k}}+k\times C_i,k|j且k\leq K_i~\} fi,jf_{i,j}表示前ii个物品产生jj中方案时的最小价格jj很大,有101810^{18},但是jj只有2,3,5,7三种质数,所以jj能取到的值上限为(logm)4(\log m)^4,

CE玩家 1366

[BZOJ2628][压位][Shift-And&Shift-Or]JZPSTR

%%%Hillan学了发Shift-And算法 再手打个Bitset就可以了 #include <cstdio> #include <iostream> #include <string> #include <cstring> #include <algorithm> #define N 2000010using namespace st

CE玩家 1230

[BZOJ4790][构造] CERC 2016 D. Dancing Disks

CERC2016 D题题意有个6*6的棋盘,刚开始在(1,1)这个点有n个棋子叠起来(棋子大小无序),你可以从顶部移动任意多个棋子到相邻的位置,但是只能向下或者向右移动,要求你构造一种移动方法使所以棋子移动到(6,6)并且棋子大小从底向上降序Sample input 6 1 6 5 4 3 2 output 1 1 D 6 2 1 D 6 4 1 D 6 5 1 D 6 6 1 R

CE玩家 1071

[AtCoder ARC077 .F] [字符串] [乱搞] SS

翻译下题解…可以发现一次变化是f(SS)=STSTf(SS)=STST,其中TT是S的一个前缀,|T||T|是S的最小周期 那么我们就只需要考虑变化g(S)=STg(S)=ST,因为不断变化1010010^{100}次的话,后面的部分就可以省去设TT的长度为dd,SS的长度是nn 可以证明如果d|nd|n,那么g(ST)=STTg(ST)=STT 否则,g(ST)=STSg(ST)=STS那么

CE玩家 1061

[前缀和 乱搞]BZOJ4972 .小Q的方格纸

发现询问是个等腰直角三角形,那么我们对于每条斜线作为斜边的等腰直角三角形,斜线上处理一下前缀和就可以了#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <ctime> #define fi first #define se secondusing namespace std;co

CE玩家 1056

[AtCoder ARC077 .E] [扫描线] [乱搞]guruguru

一次从a到b的变化可以看成一个(a,b)(a#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <vector> #define fi first #define se secondusing namespace std;const int N=200010;typedef long

CE玩家 992

[LOJ#6159][美团 CodeM 初赛 Round A][暴力即正解]最长树链

枚举每一个质数,权值是这个质数的倍数的节点设为1,否则为0,那么最长长链的长度就是点权为1的点构成的最长的链。当然不用枚举所以质数,因为每个数最多有log个不同的质因数,所以只要把所有点权质因数分解,枚举出现的质数就可以了。枚举质数后dfs,复杂度是nlogn的,因为每个点有log个不同的质因数,也就是说最多枚举到log个质数要dfs这个节点,所以复杂度是对的#include <cstdio> #i

CE玩家 983
上一篇: [BZOJ3519][Zjoi2014][模拟]消棋子
下一篇: [BZOJ3527][Zjoi2014][FFT]力
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值