管理者(最小生成树+rmq)

题目大意:

       G同学是H市的管理者。H市有n个街区,m条双向道路,每条道路连接两个不同的街区,且没有两条道路连接两个一模一样的街区。保证任意两个街区能相互到达。
       由于H市交通拥堵问题日益严重,G同学必须选择其中若干条道路升级为高速公路。升级后必须保证如果只走高速公路,任意两个街区都能相互到达。当然,每条道路升级为高速公路有不同的费用。同时由于未来的城市发展需要,可能要求某一条道路必须升级。问假如第i条道路一定要升级(1≤i≤m),最小花费是多少。1≤n≤2*10^5,n-1≤m≤2*10^5,每一条边费用<=10^9。

输入样例:

5 7
1 2 3
1 3 1
1 4 5
2 3 2
2 5 3
3 4 2
4 5 4

输出样例:

9
8
11
8
8
8
9

题解:

       看到这道题,第一想法就是假如不强制某一条边一定要修建,那么就是一个简单的最小生成树问题。所以我们先建立一棵最小生成树,显然,假如一条边在这个最小生成树上,那么一定要修这条边的最小花费就是最小生成树的边权和。

       那么问题来了,如果一条边不在这个最小生成树上呢?因为一定要加这一条边,所以我们就把这条边加进去,于是会形成一个环,我们的任务就是把环上最长的边删掉。对于这样一个环,它有一个性质:假如我们新加入的边连接u和v,那么环的范围就是u-Lca(u,v)-v,所以我们就可以用rmq来解决求最大值这个问题。

#include<iostream>
#include<fstream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
using namespace std;

const int maxl = 20;
int n,m,cur,head[800050],fa[800050][21],dep[800050],maxf[800050][21],vis[800020];
long long ans1,ans[800050];
struct tedge
{
    int nex,to,val,num,fro;
}e[805000];
struct data
{
    int u,v,c,num;
}p[800050];

void Add(int u,int v,int c,int num)
{
    cur++;  
    e[cur].to = v;
    e[cur].nex = head[u];
    e[cur].val = c;
    e[cur].num = num;
    e[cur].fro = u;
    head[u] = cur;
}

bool cmp(data a,data b)
{
    return (a.c<b.c||(a.c==b.c&&a.u<b.u));
}

int Find(int x)
{
    if (x==fa[x][0]) return x;
    fa[x][0] = Find(fa[x][0]);
    return fa[x][0];
}

void Make_fa()
{
    for (int i=1; i<=maxl; i++)
      for (int j=1; j<=n; j++)
      fa[j][i] = fa[fa[j][i-1]][i-1];
    for (int i=1; i<=maxl; i++)
      for (int j=1; j<=n; j++)
      maxf[j][i] = max(maxf[j][i-1],maxf[fa[j][i-1]][i-1]);
}

void dfs(int root,int f)
{
    dep[root] = dep[f]+1;
    for (int i=head[root]; i!=-1; i=e[i].nex)
    {
        int v = e[i].to;
        if (v==f) continue;
        if (vis[e[i].num]!=1) continue;
        fa[v][0] = root;
        maxf[v][0] = e[i].val;
        dfs(v,root);
    }
}

int Lca(int a,int b)
{
    int u=a,v=b,cnt=0;
    if (dep[u]<dep[v]) swap(u,v);
    for (int i=maxl; i>=0; i--)
    if (dep[fa[u][i]]>dep[v]) 
    {
        cnt = max(cnt,maxf[u][i]);
        u = fa[u][i];
    }
    if (dep[u]>dep[v])
    {
        cnt = max(cnt,maxf[u][0]);
        u = fa[u][0];
    }
    if (u==v) return cnt;
    for (int i=maxl; i>=0; i--)
    if (fa[u][i]!=fa[v][i])
    {
        cnt = max(cnt,maxf[u][i]);
        cnt = max(cnt,maxf[v][i]);
        u = fa[u][i];
        v = fa[v][i];
    }
    cnt = max(cnt,maxf[u][0]);
    cnt = max(cnt,maxf[v][0]);
    return cnt;
}

int main()
{
    freopen("c.in","r",stdin);
    freopen("c.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (int i=0; i<=n; i++)
    head[i] = -1;
    for (int i=1; i<=m; i++)
    {
        int u,v,c;
        scanf("%d%d%d",&p[i].u,&p[i].v,&p[i].c);
        p[i].num = i;
    }
    sort(p+1,p+1+m,cmp);
    for (int i=1; i<=m; i++)
    {
        Add(p[i].u,p[i].v,p[i].c,p[i].num);
        Add(p[i].v,p[i].u,p[i].c,p[i].num);
    }
    
    for (int i=1; i<=n; i++)
    fa[i][0] = i;
    for (int i=1; i<=cur; i++)
    {
        int u = Find(e[i].fro), v = Find(e[i].to);
        if (u==v) continue;
        ans1+=(long long)e[i].val;  vis[e[i].num] = 1;
        fa[v][0] = u;  fa[e[i].to][0] = u;
    }
    for (int i=1; i<=cur; i++)
    if (vis[e[i].num]==1) ans[e[i].num] = (long long)ans1;
    
    fa[1][0] = 0;  maxf[1][0] = 0;
    dfs(1,0);
    Make_fa();
    
    for (int i=1; i<=cur; i++)
    if (vis[e[i].num]!=1)
    {
        int maxe = 0;
        maxe = Lca(e[i].fro,e[i].to);
        ans[e[i].num] = (long long)ans1-maxe+e[i].val;
        i++;
    }
    
    for (int i=1; i<=m; i++)
    printf("%I64d\n",ans[i]);
    return 0;
}

 

转载于:https://www.cnblogs.com/Janous/p/7545515.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值