【JZOJ4596】Stree

本文介绍了一种解决CF609E问题的方法,通过构造最小生成树并利用树上倍增算法来高效地计算每条边所对应的最小生成树的总边权值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

给出n个点,m条有权边,现对于每一条边,你需要回答出包含这条边的最小生成树的总边权值。

原题在:CF609E

Solution

对原图做一遍最小生成树,那么在最小生成树上的边答案就是该最小生成树边权和。

原图没有重边,这说明任选 n1 条不构成环的边都可以构成生成树。

对于不在最小生成树上的边 (u,v) ,我们知道树中最短路径是唯一的,如果添加了 (u,v) ,那么就会生成环,这时我们只要删掉原最小生成树上的 u>v 路径上最大的边,就可以再次将原图变为包含 (u,v) 的最小生成树。

运用树上倍增算法可以达到 O(nlog2n)

Code

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define N 200001
#define M 400001
#define ll long long
using namespace std;
struct node{
    int u,v,w,t;
}b[N];
int f[N];
int wz[N];
ll c[N];
int to[M],next[M],last[M],val[M],num=0;
int fa[N][21],mx[N][21];
int d[N];
void link(int x,int y,int c)
{
    num++;
    to[num]=y;
    next[num]=last[x];
    last[x]=num;
    val[num]=c;
}
bool cmp(node x,node y)
{
    return x.w<y.w;
}
int find(int x)
{
    return !f[x]?x:f[x]=find(f[x]);
}
void dfs(int x)
{
    for(int i=last[x];i;i=next[i])
    {
        int v=to[i];
        if(v!=fa[x][0])
        {
            fa[v][0]=x;
            mx[v][0]=val[i];
            d[v]=d[x]+1;
            dfs(v);
        }
    }
}
int work(int x,int y)
{
    if(d[x]<d[y]) swap(x,y);
    int tmp=0;
    fd(i,20,0)
    if(fa[x][i] && d[fa[x][i]]>=d[y])
    tmp=max(tmp,mx[x][i]),x=fa[x][i];
    fd(i,20,0)
    if(fa[x][i]!=fa[y][i] && fa[x][i] && fa[y][i])
    {
        tmp=max(tmp,mx[x][i]);
        x=fa[x][i];
        tmp=max(tmp,mx[y][i]);
        y=fa[y][i];
    }
    if(x!=y)
    {
        tmp=max(tmp,mx[x][0]);
        tmp=max(tmp,mx[y][0]);
    }
    return tmp;
}
int main()
{
    freopen("street.in","r",stdin);
    freopen("street.out","w",stdout);
    int n,m;
    cin>>n>>m;
    fo(i,1,m)
    {
        scanf("%d %d %d",&b[i].u,&b[i].v,&b[i].w);
        b[i].t=i;
    }
    sort(b+1,b+m+1,cmp);
    fo(i,1,m) wz[b[i].t]=i;
    int z=0;
    ll tt=0;
    fo(i,1,m)
    {
        int fx=find(b[i].u),fy=find(b[i].v);
        if(fx!=fy)
        {
            link(b[i].u,b[i].v,b[i].w);
            link(b[i].v,b[i].u,b[i].w);
            f[fy]=fx;
            tt+=b[i].w;
            c[b[i].t]=-1;
            z++;
            if(z==n-1) break;
        }
    }
    fo(i,1,m)
    if(c[i]<0) c[i]=tt;
    d[0]=-1;
    dfs(1);
    fo(j,1,20)
    fo(i,1,n)
    {
        fa[i][j]=fa[fa[i][j-1]][j-1];
        mx[i][j]=max(mx[i][j-1],mx[fa[i][j-1]][j-1]);
    }
    fo(q,1,m)
    if(!c[q])
    {
        int u=b[wz[q]].u,v=b[wz[q]].v,w=b[wz[q]].w;
        int zz=work(u,v);
        c[q]=tt-zz+w;
    }
    fo(i,1,m) printf("%lld\n",c[i]);
}
内容概要:本报告探讨了AI赋能汽车行业智能化转型的技术创新,涵盖了研发设计智能化、用户运营智能化和座舱体验智能化三大核心场景。通过解析智己汽车的实践,展示了AI在压缩研发周期、提升销售转化率和优化座舱体验等方面的实际价值。报告指出,AI技术正深刻改变汽车产业的价值链,推动从“机械制造”向“移动智能体”的转变,并提出了未来汽车行业智能化的发展趋势,包括更个性化的用户体验、跨产业融合以及数据安全和隐私保护的重要性。 适合人群:汽车行业从业者、技术研发人员、市场营销人员、政策制定者及相关领域的研究者。 使用场景及目标:①理解AI技术在汽车研发设计中的应用,如生成式设计、仿真优化和智能测试;②掌握AI在用户运营中的应用,如智能内容生成、销售辅助和数据闭环优化;③了解AI在座舱体验中的应用,如多意图服务编排、情感计算和端到端语音链路优化;④探讨未来汽车行业智能化的发展方向,包括个性化服务、产业融合和数据安全。 其他说明:本报告不仅提供了理论和技术层面的分析,还结合了具体的落地实践案例,为企业在智能化转型过程中提供了可复用的AI赋能框架。报告强调了政策支持、技术创新和产业协同在推动汽车行业智能化转型中的重要作用,旨在为行业提供有价值的参考和指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值