首页 > 其他分享 >Topcoder SRM622-Div1-Lv2 Ethernet

Topcoder SRM622-Div1-Lv2 Ethernet

时间:2024-05-09 17:23:55浏览次数:21  
标签:ch int 子图 sondis SRM622 MAXN disf Topcoder Ethernet

涉及知识点:图论 贪心

题意

有一颗 \(n\ (\leq 50)\) 个节点的树,节点 \(i\) 的父亲为 fa[i],到父亲的边的边权为 dis[i],边权 \(\leq 500\)。现在要将每个点分配到 \(k\) 个连通子图中的一个,使得子图中距离最长的两个点距离小于 \(maxd\),定义子图为:如果 \(u\) 和 \(v\) 都是该子图的点并且原树中 \(u\) 到 \(v\) 存在边,那么子图中 \(u\) 到 \(v\) 也存在边。求出最小可能的 \(k\)。

思路

首先可以翻译一下题目,题目中对于找子图的描述是“分配”,但实际上我们会发现无论怎么分配,合法的子图一定是原树删掉某些边得到的森林,因为假设原树上两个点 \(u\) 和 \(v\) 都属于一个子图,但 \(u\) 到 \(v\)​ 到的路径上的点属于其他子图,该子图不可能连通,因此不合法。

因此我们只需要贪心断边,记 \(disf[i]\) 为 \(i\) 到其子树最远的点的距离,记录点 \(fa\) 的所有儿子的 \(disf+w\) (\(w\) 为父亲到儿子的边的边权)并从大到小排序,每次判断最大和次大加起来是否会超 \(maxd\),如果超出则断开最大对应的点到父亲的边。

代码

#include<bits/stdc++.h>
using namespace std;
#ifdef ONLINE_JUDGE
#define getchar __getchar
inline char __getchar(){
    static char ch[1<<20],*l,*r;
    return (l==r&&(r=(l=ch)+fread(ch,1,1<<20,stdin),l==r))?EOF:*l++;
}
#endif
template<class T>inline void rd(T &x){
    T res=0,f=1;
    char ch=getchar();
    while(ch<'0' || ch>'9'){if(ch=='-')f=-1; ch=getchar();}
    while('0'<=ch && ch<='9'){res=res*10+ch-'0';ch=getchar();}
    x=res*f;
}
template<class T>inline void wt(T x,char endch='\0'){
    static char wtbuff[20];
    static int wtptr;
    if(x==0){
        putchar('0');
    }
    else{
        if(x<0){x=-x;putchar('-');}
        wtptr=0;
        while(x){wtbuff[wtptr++]=x%10+'0';x/=10;}
        while(wtptr--) putchar(wtbuff[wtptr]);
    }
    if(endch!='\0') putchar(endch);
}
typedef pair<int,int> pii;
const int MAXN=55,MAXD=505;
int n,fa[MAXN],dis[MAXN],maxd,f[MAXN],disf[MAXN];
vector<pii>g[MAXN];
void dfs(int x){
    vector<int>sondis;
    sondis.push_back(0);
    for(auto it:g[x]){
        if(it.first==fa[x]) continue;
        dfs(it.first);
        f[x]+=f[it.first];
        sondis.push_back(disf[it.first]+it.second);
    }
    sort(sondis.begin(),sondis.end());
    while(sondis.size()>=2 && sondis.back()+sondis[sondis.size()-2]>maxd){
        f[x]++;
        sondis.pop_back();
    }
    disf[x]=sondis.back();
}
int main(){
    rd(n);
    for(int i=1;i<=n;i++){
        rd(fa[i]); 
    }
    rd(n);
    for(int i=1;i<=n;i++){
        rd(dis[i]);
        g[fa[i]].emplace_back(i,dis[i]);
        g[i].emplace_back(fa[i],dis[i]);
    }
    rd(maxd);
    n++;
    dfs(0);
    cout<<f[0]+1<<endl;
    return 0;
}

标签:ch,int,子图,sondis,SRM622,MAXN,disf,Topcoder,Ethernet
From: https://www.cnblogs.com/SkyNet-PKN/p/18182740

相关文章

  • Topcoder SRM647-Div1-Lv2 CtuRobots
    涉及知识点:动态规划题意有\(n\(\leq500)\)个机器人,每个机器人的价格为\(cost_i\(\leq10^4)\),油箱容量为\(cap_i\(\leq10^9)\),一单位燃料可以走一单位距离,你可以给购买的机器人编号,机器人\(k\)可以给机器人\(k+1\)补充燃料,但是任意时刻机器人的燃料不能超过其油箱......
  • PLC通讯革新:EtherNetIP转PROFINET网关在工业现场的应用指南
    在工业自动化领域,PLC扮演着至关重要的角色。随着技术的不断进步,PLC通讯协议的兼容性变得越来越重要。本文将详细介绍如何通过Profinet和Ethernet/IP网关,将罗克韦尔PLC的EtherNet/IP接口与西门子S7-1200PLC的Profinet接口进行连接和配置,从而实现两种通讯协议的互操作性。  首......
  • TOPCODER时期训练赛小总结
    20240407模拟赛T1TurnOnLamps直接树上dp维护子树内是否有路径在根节点处停止的最小操作数\(O(n)\)维护即可,数据范围纯sbT2XorCards线性基或高斯消元板子,高斯消元比较好想。可以枚举大于等于时前若干位是相同的,然后直接搞出限制消元即可。时间复杂度合理。线性基则非常......
  • TopCoder SRM478C RandomApple 题解
    题意:有\(k\)种苹果和\(n\)个箱子,每个箱子中有一些苹果,先等概率选取\(n\)个箱子组成集合的非空子集,再从选出的苹果中随机选一个,问每种苹果被选中的概率是多少箱子\(i\)有\(a_{i,j}\)个第\(j\)种苹果,第\(i\)个箱子的总苹果数\(siz_i=\sum\limits_{j=1}^ka_{i,j}\),苹果总数\(sum=\su......
  • 北京兴达易控EtherNET转Profinet网关
    北京兴达易控EtherNET主站转Profinet网关是一种能将EtherNET协议和Profinet协议相互转换的设备,将网络通信技术与工业自动化技术完美结合。它不仅简化了通信的复杂度,而且提高了系统的可靠性和稳定性。作为一个EtherNET主站转Profinet网关,它能够将不同网络之间的数据进行转换和传......
  • EtherNET转Profinet网关在AB系统的配置方法
    EtherNET转Profinet网关是用于连接EtherNET和Profinet两种网络协议的设备。它充当了一个重要的中转桥梁,实现了两种不同协议之间的互相通信和数据交换。在工业自动化控制系统中,这种网关的应用非常广泛,能够满足各种复杂的通信需求。由于现场不同会出现使用系统的差异,下面介绍EtherNE......
  • 使用EtherNET转Profinet网关在博图配置PROFINET从站
    使用EtherNET转Profinet网关在博图配置Profinet从站XD-EPPN20是兴达易控推出具有Profinet从站功能EtherNET转Profinet网关。EtherNET转Profinet网关主要功能是将Profinet网络和ETHERNET/IP网络连接起来。EtherNET转Profinet网关连接到Profinet总线中做为从站使用,连接到ETHERNET/I......
  • 使用EtherNET转Profinet网关配置EtherNET/IP地址说明
    EtherNET转Profinet网关配置EtherNET/IP地址是将两种网络之间的连接进行设置和调整,以便实现数据的传输和信息的交互。这个过程中,需要对EtherNET/IP地址进行配置,以确保数据能够正确地在网络之间传递。通过配置EtherNET/IP地址,可以准确地指定物理设备的位置和通信路径,从而使数据传输......
  • Ethernet против промышленного Ethernet: различия и
    Ethernetкактехнологиясетевойпередачи,соответствующаястандартуIEEE802.3,широкоиспользуетсявсредахсоптическимкабелемивитойпарой.Егои......
  • 关于EthernetIP转ModbusTCP协议转换的成熟应用
    在现代工业自动化领域,以太网和互联网的集成已经成为一种趋势。Ethernet/IP转ModbusTCP网关作为一种关键的通信设备,能够实现以太网和ModbusTCP协议之间的转换,从而在工业自动化领域中发挥重要作用。本文将详细介绍Ethernet/IP转ModbusTCP网关的应用和配置方法。Ethernet/IP转Mo......