首页 > 其他分享 >2024 暑假友谊赛-热身2

2024 暑假友谊赛-热身2

时间:2024-07-25 19:27:32浏览次数:12  
标签:cur int max void tr 热身 2024 tag 友谊赛

Tree Destruction - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:树的直径。

定理:在一棵树上,从任意节点 y 开始进行一次 DFS,到达的距离其最远的节点 z 必为直径的一端。
第一次dfs1(),从任意一个点,到达的最远的点必然是直径两端的其中一个。
再从找到的端点开始dfs1(),找到另一个端点。这样就可以o(n)确定该树的直径.得到直径的端点S和T.
再两次dfs2(),分别得到S和T到达其他每个点的距离.
之后就可以从度为1的点x开始删除,每次都选和x更远的端点.并且删除x.
最后再处理剩下的直径的点.
int n;
vector<int> vct[200005];
int S=0,T=0,maxd=0,tag=0,typ=0;
int dis[2][200005];
int du[200005];
vector<array<int,3>> ans;
int sum=0;
queue<int> que;
void dfs1(int s,int d,int fa){    求从s点出发,可以达到最远的点.
    if(d>maxd){
        if(!tag) S=s;
        else T=s;
        maxd=d;
    }
    for(auto v:vct[s]) if(v!=fa) dfs1(v,d+1,s);
}
void dfs2(int s,int d,int fa){   从端点S/T出发到达其他点的距离
    dis[typ][s]=d;
    for(auto v:vct[s]) if(v!=fa) dfs2(v,d+1,s);
}
void process(int op){
    while(que.size()){
        int cur=que.front();
        que.pop();
        du[cur]--;
        if(op==1){
            if(dis[0][cur]>=dis[1][cur]) ans.emplace_back(array{S,cur,cur}),sum+=dis[0][cur];
            else ans.emplace_back(array{T,cur,cur}),sum+=dis[1][cur];
        }
        else if(op==2) ans.emplace_back(array{S,cur,cur}),sum+=dis[0][cur];
        for(auto v:vct[cur]) {
            du[v]--;
            if(du[v]==1) que.emplace(v);
        }
    }
}
题意:从树上选两个叶子节点,把他们的距离加到ans中,并且删去其中一个节点。求剩下一个点时的ans最大值。
Tree Destruction
https://www.luogu.com.cn/problem/CF911F
定理:在一棵树上,从任意节点 y 开始进行一次 DFS,到达的距离其最远的节点 z 必为直径的一端。
第一次dfs1(),从任意一个点,到达的最远的点必然是直径两端的其中一个。
再从找到的端点开始dfs1(),找到另一个端点。这样就可以o(n)确定该树的直径.得到直径的端点S和T.
再两次dfs2(),分别得到S和T到达其他每个点的距离.
之后就可以从度为1的点x开始删除,每次都选和x更远的端点.并且删除x.
最后再处理剩下的直径的点.
void solve(){           补B  选叶子   o(n)
    cin>>n;
    for(int i=1;i<=n-1;i++){
        int u,v; cin>>u>>v;
        vct[u].emplace_back(v);
        vct[v].emplace_back(u);
        du[u]++,du[v]++;
    }
    tag=0,maxd=0,dfs1(1,0,0);
    tag=1,maxd=0,dfs1(S,0,0);
    typ=0,dfs2(S,0,0);
    typ=1,dfs2(T,0,0);
    for(int i=1;i<=n;i++) if(du[i]==1&&i!=S&&i!=T) que.emplace(i);
    du[S]=0,du[T]=0;
    process(1);
    que.emplace(T);
    process(2);
    cout<<sum<<endl;
    for(auto a:ans) cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
}

DivRem Number - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:

N%m=N-(N/m)*m
移项N=(m+1)*(N/m), 那么(m+1)是N的因子 , 那么枚举N的因子即可
题意:给定N,求满足(N/m)=N%m的m的总和.   除法全都是向下取整
DivRem Number
https://www.luogu.com.cn/problem/AT_diverta2019_d
N%m=N-(N/m)*m
移项N=(m+1)*(N/m), 那么(m+1)是N的因子 , 那么枚举N的因子即可
void solve(){           补G  o(sqrt(N))
    int N; cin>>N;
    int ans=0;
    for(int i=0;i<=sqrt(N);i++){
        if(N%(i+1)==0){       i是在枚举m的值,但是i不是因子,i+1才是因子
            int x=N/(i+1);   另一个因子
            if(i!=0&&N==(i+1)*(N/i)) ans+=i;
            if(x-1!=0&&N==x*(N/(x-1))) ans+=x-1;  x=m+1,那么m=x-1.
        }
    }
    cout<<ans;
}

Beautiful Mirrors - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:还是不懂。。

const int mod=998244353;
int quickpow(int a,int b){
    int res=1;
    while(b){
        if(b&1) res*=a,res%=mod;
        a*=a,a%=mod;
        b>>=1;
    }
    return res;
}
定义f[i]为到达第i天,并且第i天也快乐的期望天数.
思路:第i天询问失败,从头开始。此时概率为1-p,消耗天数为f[i-1]+1+f[i]。乘上概率,代价为(1-pi)(f[i-1]+1+f[i]).
第i天询问成功。此时概率为p,消耗天数为f[i-1]+1。乘上概率,代价为pi*(f[i-1]+1).
那么f[i]=pi*(f[i-1]+1)+(1-pi)(f[i-1]+1+f[i]).
整理有f[i]=( (f[i-1]+1) / (pi/100) ). 注意除法取mod用逆元.
此处解释,询问失败时消耗天数为 f[i-1]+1+f[i] 是因为:
当前要重新回到第i天,所以需要加f[i]. 而到达第i天之前需要先到达i-1天并且再+1才能回到第i天.
还是不懂。。为什么不用考虑回到i-2天然后加一天到达i-1天,然后再加一天回到第i天?i-3?i-4?..
官方题解: https://codeforces.com/blog/entry/71995

标签:cur,int,max,void,tr,热身,2024,tag,友谊赛
From: https://blog.csdn.net/qq_42643660/article/details/140656753

相关文章

  • NOIP2024/7/25模拟赛
    T4题意:答案对\(2^{16}\)取模。分析:根节点\(1\)选到\(1\)的概率为\(\frac{1}{n}\),然后随便把剩下的\(n-1\)分配给它的所有子树,记\(1\)的其中一个儿子为\(y\),那么\(y\)选到它所被分配到的数中最小值的概率为\(\frac{1}{siz_{y}}\),然后\(y\)再继续分配给它的子......
  • 河南萌新联赛2024第(二)场:南阳理工学院
    1.D-A*BBBB原题链接:https://ac.nowcoder.com/acm/contest/87255/D根据乘法的原理,且b的每一位都相同,最终答案则是错位相加得出的结果,于是我们将a翻转,从个位开始计算,如果当前位置小于a.size就往前累加,但如果大于或等于b.size就从头开始一个一个的减(这个过程可以通过纸上手写乘法计......
  • 2024.7.25(Git、gitlab以及分支管理)
    分布式版本控制系统一、Git概述Git是一种分布式版本控制系统,用于跟踪和管理代码的变更。它是由LinusTorvalds创建的,最初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本,并且可以在不同的开发人员之间进行协作。Github用的就是Git系统来管理它们的网......
  • Metasploit Pro 4.22.2-2024071901 (Linux, Windows) - 专业渗透测试框架
    MetasploitPro4.22.2-2024071901(Linux,Windows)-专业渗透测试框架Rapid7Penetrationtesting,releaseJul19,2024请访问原文链接:https://sysin.org/blog/metasploit-pro-4/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org世界上最广泛使用的渗透测试框架......
  • 2024年CRM系统选型:9款最强推荐
    文章介绍的工具有:纷享销客、ZohoCRM、八百客、红圈通、简道云、简信CRM、Salesforce、HubSpotCRM、Apptivo。在选择合适的CRM系统时,许多企业面临着功能繁多、选择困难的痛点。对于中小企业来说,找到一个既能提高客户关系管理效率,又能适应业务扩展的CRM系统尤为重要。本文将介......
  • 2024企业网站源码|网站后台管理系统 带搭建教程
    在网站搭建前需要考虑的问题了解完网站的搭建基本流程后,我们需要知道,网站该怎么设计,怎么搭建?在建站的时候需要从哪些方面考虑?网站的需求,是用来干什么的,比如:展示产品、品牌宣传、营销推广等;打算用什么方式建站,外包公司还是SaaS产品甚至是自己开发;网站内容,标准的企业网站需要包......
  • 2024 山东省夏令营高算班【讲课】
    Day1数论数论入门欧几里得算法若\(a\perpb\),则\(\gcd(a^m-b^m,a_n-b^n)=a^{\gcd(n,m)}-b^{\gcd(n,m)}\),证明用辗转相减做到指数上。若\(n^a\equiv1(\modm)\)且\(n^b\equiv1(\modm)\),则\(n^{\gcd(a,b)}\equiv1(\modm)\),同理可证。[CF1656H]EQUALLCMSUBSETS......
  • 【2024-ZR-C Day 8】动态规划(2):状压 DP、数位 DP
    【2024-ZR-CDay8】动态规划(2)1.状压DP1.1.子集枚举for(ints=m;s;s=(s-1)&m);1.2.状态压缩1.2.1.快速高维前缀和对于一个\(k\)维数组,设每维的大小分别为\((m_1,m_2,\cdots,m_k)\),要访问的位置为\((i_1,i_2,\cdots,i_k)\),则用\((\cdots(i_1\c......
  • 20240724模拟赛订正题笔记
    (T1)lnsyoj2208逆流而上/P10737[SEERC2020]ReverseGame考虑到失败时字符串应为前面都是0,后面都是1(例如"0000001111111")所以可以将原串的逆序对数求出,记为m,对于每个可翻转的串进行分类讨论:1."10"->"01"可以将原串的逆序对减1。2."100"->"001""110"->"011......
  • 2024年文化和旅游部技术创新中心申报流程
    在文化产业与旅游产业深度融合的今天,文化和旅游部技术创新中心的申报成为了推动行业创新升级、激发市场活力的重要途径。这一国家级平台不仅象征着行业领先地位,更是企业技术实力与创新能力的直观体现。我们深谙申报流程之关键,致力于为有志于申报的文化旅游企业或机构提供专业指......