【练习】HDU 1827 Summer Holiday (强连通分量+缩点)

题意

给定N个人,M条关系(N <=1000, M<= 2000),,如果a到b有边则表示第a个人能够联系到第b个人,联系第i个人的花费为v[i],联系具有传递性。现在需要联系到所有人,求最小联系人数和最小花费。

题解

考虑使用tarjan算法求解出所有强连通分量,然后强连通分量缩点(染色),然后考虑最小花费。自然想到如果一个部分(点)没有人指向它,那么一定要通知他,也就对应图中的入度。若一个连通分量入度为0,则一定要选中这个连通分量,并且自然选择这个连通分量中花费最小的。

可以在Tarjan的规程中,求出每个连通分量连通的最小花费。对缩点的图进行一次dfs,求出入度,最后统计答案即可。

代码

#include<bits/stdc++.h>
using namespace std;
typedef double db;
typedef long long ll;
typedef unsigned long long ull;
const int nmax = 2005;
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const ull p = 67;
const ull MOD = 1610612741;
int N,M;
int cost[1005];
struct Tarjan{
    int head[nmax],low[nmax],dfn[nmax],sstack[nmax],color[nmax],sz[nmax],top,sccnum,dfnnum,tot,n;
    int cnt = 0; ll ans ;
    int in[nmax],out[nmax],mincost[nmax];
    bool visit[nmax];
    struct edge{int to,nxt;}e[nmax<<1];
    void init(int n){
        memset(head,-1,sizeof head);
        memset(mincost,INF,sizeof mincost);
        memset(dfn,0,sizeof dfn);
        memset(color,0,sizeof color);
        memset(visit,0,sizeof visit);
        memset(sz,0,sizeof sz);
        memset(in,0,sizeof in);
        memset(out,0,sizeof out);
        ans = cnt = dfnnum = top = sccnum = tot = 0;
        this->n = n;
    }
    void add_edge(int u,int v){
        e[tot].to = v, e[tot].nxt = head[u]; head[u] = tot++;
    }
    void tarjan(int u){
        low[u] = dfn[u] = ++dfnnum;
        visit[u] = true;
        sstack[++top] = u;

        for(int i = head[u] ; i != -1; i = e[i].nxt){
            int v = e[i].to;
            if(!dfn[v]){
                tarjan(v);
                low[u] = min(low[u],low[v]);
            }else if(visit[v]) low[u] = min(low[u], dfn[v]);
        }
        if(dfn[u] == low[u]){
            visit[u] = false;
            color[u] = ++ sccnum;
//            printf("scc %d %d",sccnum,u);
            sz[sccnum]++;
            mincost[sccnum] = min(mincost[sccnum],cost[u]);
            while(sstack[top] != u){
//                printf(" %d",sstack[top]);
                color[sstack[top]] = sccnum;
                sz[sccnum]++;
                visit[sstack[top]] = false;
                mincost[sccnum] = min(mincost[sccnum],cost[sstack[top]]);
                top--;
            }
//            printf("\n");
            top--;
        }
    }
    void dfs(int u){
        visit[u] = true;
        for(int i = head[u];i!=-1;i=e[i].nxt){
            int v = e[i].to;
            if(!visit[v]){
                if(color[v] != color[u]) in[color[v]]++,out[color[u]]++;
                dfs(v);
            }else if(visit[v]){
                if(color[v] != color[u]) in[color[v]]++,out[color[u]]++;
            }
        }
    }
    void start(){for(int i = 1;i<=n;++i) if(!dfn[i]) tarjan(i);}
    void get_ans(){
//        if(sccnum == 1) return 0;
        memset(visit,0,sizeof visit);
        for(int i = 1;i<=n;++i) if(!visit[i]) dfs(i);
//        ll  = 0;
        for(int i = 1;i<=sccnum;++i){
//            printf("in %d %d\n",i,in[i]);
            if(!in[i]) ans += (ll)mincost[i],cnt++;
//            if(!out[i]) notout++;
        }
//        return ans;
    }
}solver;
int main(){
    while(scanf("%d %d",&N,&M)!=EOF){
        solver.init(N); int u, v;
        for(int i = 1;i<=N;++i) scanf("%d",&cost[i]);
        for(int i = 1;i<=M;++i){
            scanf("%d %d",&u,&v);
            solver.add_edge(u,v);
        }
        solver.start();
//        printf("%d\n",solver.sccnum);
        solver.get_ans();
        printf("%d %lld\n",solver.cnt,solver.ans);
    }
    return 0;
}
以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值