正题


题目大意

nnn个点,每个点有一个wiw_iwi​,mmm条边,对于一条边(x,y)(x,y)(x,y),边权为∑i=1wx∑j=1wy[gcd(i,j)==1](i+j)\sum_{i=1}^{w_x}\sum_{j=1}^{w_y}[gcd(i,j)==1](i+j)i=1∑wx​​j=1∑wy​​[gcd(i,j)==1](i+j)
选择一个最小的PPP使得所有边权减去PPP(不能小于000)使得最短路长度不超过TTT


解题思路

一道缝合题,边权要莫反算
f(x)=∑i=1n∑j=1m[gcd(i,j)==x](i+j)f(x)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==x](i+j)f(x)=i=1∑n​j=1∑m​[gcd(i,j)==x](i+j)
那么有F(x)=∑x∣df(d)=∑i=1⌊nx⌋∑i=1⌊mx⌋(i∗⌊nx⌋+j∗⌊mx⌋)F(x)=\sum_{x|d}f(d)=\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum_{i=1}^{\lfloor\frac{m}{x}\rfloor}(i*\lfloor\frac{n}{x}\rfloor+j*\lfloor\frac{m}{x}\rfloor)F(x)=x∣d∑​f(d)=i=1∑⌊xn​⌋​i=1∑⌊xm​⌋​(i∗⌊xn​⌋+j∗⌊xm​⌋)
然后有f(x)=∑x∣dF(dx)μ(d)f(x)=\sum_{x|d}F(\frac{d}{x})\mu(d)f(x)=x∣d∑​F(xd​)μ(d)
f(1)=∑i=1nF(i)μ(i)f(1)=\sum_{i=1}^nF(i)\mu(i)f(1)=i=1∑n​F(i)μ(i)
然后前面那个F(x)F(x)F(x)整除分块+等差数列求和,前面那个μ\muμ求前缀和算即可。

然后后面直接二分一下P+dijP+dijP+dij就好了。

时间复杂度O(mwi+(n+m)log⁡n)O(m\sqrt w_i+(n+m)\log n)O(mw​i​+(n+m)logn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const ll N=1e4+10,M=1e5+10;
struct node{ll to,next,w;
}a[N*4];
struct point{ll x,w;
};
bool operator<(point x,point y)
{return x.w>y.w;}
priority_queue<point> q;
ll n,m,T,tot,w[N],ls[N],f[N];
ll mu[M],pri[M],cnt;
bool v[N],vis[M];
void prime(){mu[1]=1;for(ll i=2;i<M;i++){if(!vis[i])pri[++cnt]=i,mu[i]=-1;for(ll j=1;j<=cnt&&pri[j]*i<M;j++){vis[pri[j]*i]=1;if(i%pri[j]==0)break;mu[pri[j]*i]=-mu[i];}}for(ll i=1;i<M;i++)mu[i]=mu[i]*i+mu[i-1];return;
}
ll s(ll n){return n*(n+1)/2;}
ll solve(ll n,ll m){ll ans=0;if(n>m)swap(n,m);for(ll l=1,r;l<=n;l=r+1){r=min(n/(n/l),m/(m/l));ans+=(s(n/l)*(m/l)+s(m/l)*(n/l))*(mu[r]-mu[l-1]);}return ans;
}
void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
bool check(ll p){memset(f,0x3f,sizeof(f));memset(v,0,sizeof(v));f[1]=0;q.push((point){1,0});while(!q.empty()){ll x=q.top().x,w=q.top().w;q.pop();if(v[x])continue;v[x]=1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to,zw=max(a[i].w-p,0ll);if(f[y]>f[x]+zw){f[y]=f[x]+zw;if(!v[y])q.push((point){y,f[y]});}}}return f[n]<=T;
}
signed main()
{freopen("magic.in","r",stdin);freopen("magic.out","w",stdout);prime();scanf("%lld%lld%lld",&n,&m,&T);for(ll i=1;i<=n;i++)scanf("%lld",&w[i]);for(ll i=1;i<=m;i++){ll x,y,val;scanf("%lld%lld",&x,&y);val=solve(w[x],w[y]);addl(x,y,val);addl(y,x,val);}ll l=0,r=1e18;while(l<=r){ll mid=(l+r)>>1;if(check(mid))r=mid-1;else l=mid+1;}check(l);printf("%lld %lld",l,f[n]);return 0;
}

jzoj5701-[gdoi2018day2]谈笑风生【莫比乌斯反演,二分,最短路】相关推荐

  1. 【BZOJ2440】完全平方数,莫比乌斯反演+二分答案+容斥思想

    Time:2016.05.29 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 这是一个和μ函数有很大关系的题目 x以内的无平方因子数=无需是任何质数的倍数的数的数量(即x)-是至少 ...

  2. BZOJ-2440-完全平方数-中山市选2011-容斥原理-莫比乌斯函数-二分查找

    描述 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱.这天是小X的生日,小 W ...

  3. 数论 —— 莫比乌斯反演

    [反演] 假设我们手头有个数列 F,通过某种变换 H,可以得到函数 G.,即: 但现在只有函数 G,需要求 F,那么我们就需要寻找一种变换 ,使得 G 在经过这种变换后能够获得 F,这个过程即为反演, ...

  4. 莫比乌斯反演入门题目(详细)

    目录 luoguP2568 GCD hdu1695 GCD luogu3455[POI2007]ZAP-Queries luogu2522 [HAOI2011]Problem b P4318 完全平方 ...

  5. 【笔记】莫比乌斯反演(1)

    上一篇:莫比乌斯反演(0) 文章目录 莫比乌斯反演 关于反演 莫比乌斯函数 定义 性质 莫比乌斯反演公式 公式1 公式2 整除分块 引入 关于整除分块 基础推导 简单扩展 莫比乌斯反演的应用 例1:证 ...

  6. 【Project Euler】530 GCD of Divisors 莫比乌斯反演

    [题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然 ...

  7. 狄利克雷卷积莫比乌斯反演证明

    狄利克雷卷积简介 卷积这名字听起来挺学究的,今天学了之后发现其实挺朴实hhh. 卷积: "(n)"表示到n的一个范围. 设\(f,g\)是两个数论函数(也就是说,以自然数集为定义域 ...

  8. 2021牛客暑期多校训练营(二) J. Product of GCDs 不动脑子的莫比乌斯反演做法(

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://ac.nowcoder.com/acm/contest/11253/J ...

  9. P4619 [SDOI2018]旧试题(莫比乌斯反演,建图优化三重枚举,三元环计数,神仙好题,超级清晰易懂)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4619 [SDOI2018]旧试题(莫比乌斯反演,三元环计数) Problem 计算: ∑i=1A ...

最新文章

  1. 第十四课.Transformer
  2. 【Android 逆向】Android 进程注入工具开发 ( 远程调用总结 | 远程调用注意事项 )
  3. C/C++中的常量指针与指针常量
  4. 现在做Android开发有前途吗?社招面试心得
  5. Tarjan 算法 常用模板
  6. Java并发编程实战~协程
  7. 王者荣耀s24服务器维护多久才结束,王者荣耀s24赛季几点更新结束?6月23日s24赛季开启时间公布[多图]...
  8. 信息学奥赛C++语言:奖励钢笔
  9. java线程通讯的方式
  10. 在HTML中使用JavaScript
  11. 随手记_英语_学术写作
  12. linux log变色
  13. Zip伪加密 破解ZIP密码
  14. 解决Android SDK Manager无法更新下载 - 猪悟能 - 博客园 (cnblogs.com)
  15. 创办公司流程及注意事项
  16. 汽车在线升级系统(OTA)开发浅析
  17. 洛谷 P2782 友好城市
  18. elasticsearch 基础 —— Query String
  19. mysql数据库添加某个IP访问
  20. 东芝TC358775XBG转换芯片:MIPI转LVDS(单/双路),替代ICN6202芯片

热门文章

  1. micropython 网络驱动_network_网卡驱动
  2. 求职华为,被问观察者模式,从没有这种体验!!!
  3. mysql查询重复的名字_Mysql中like用法:查询名字中含有风字的学生信息
  4. yolo算法的优缺点分析_yolo算法介绍
  5. 后端学习 - MySQL存储引擎、索引与事务
  6. 7-2 银行家算法--申请资源 (30 分)
  7. [设计模式]工厂方法模式
  8. Factory Method(工厂方法)--对象创建型模式
  9. mysql-5.7.10-winx64 MySQL服务无法启动,服务没有报告任何错误的解决办法
  10. P1972 [SDOI2009]HH的项链