hdu 3072 有向图缩点成最小树形图计算最小权

本文介绍了一种解决特定图论问题的方法:在有向图中找到从起点出发遍历所有节点的最小费用路径,通过使用强连通分量(SCC)的概念和Tarjan算法进行缩点优化。

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

题意,从0点出发,遍历所有点,遍历边时候要付出代价,在一个SCC中的边不要付费。求最小费用。

有向图缩点(无需建立新图,,n《=50000,建则超时),遍历边,若不在一个SCC中,用一个数组更新记录最小到达该连通分量的最小边权即可。。。边聊天,边1A,哈哈。。。

#include<iostream>
#include<stack>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxv=50005,maxe=100005;
int nume=0;int head[maxv];int e[maxe][3];
void inline adde(int i,int j,int c)
{
    e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
    e[nume++][2]=c;
}
int dfn[maxv];int low[maxv];int vis[maxv];int ins[maxv]; stack<int>sta;
int scc[maxv];int numb=0;int times=0;
int n,m;
void tarjan(int u)
{
    dfn[u]=low[u]=times++;
    ins[u]=1;
    sta.push(u);
    for(int i=head[u];i!=-1;i=e[i][1])
    {
        int v=e[i][0];
        if(!vis[v])
        {
            vis[v]=1;
            tarjan(v);
            if(low[v]<low[u])low[u]=low[v];
        }
        else if(ins[v]&&dfn[v]<low[u])
        {
            low[u]=dfn[v];
        }
    }
    if(low[u]==dfn[u])
    {
        numb++;
        int cur;
       do
        {
            cur=sta.top();
            sta.pop();
            ins[cur]=0;
            scc[cur]=numb;
        }while(cur!=u);
    }
}
int mincost_to_v[maxv];    //记录
void solve()
{
     vis[0]=1;
     tarjan(0);
    for(int i=0;i<n;i++)
      for(int j=head[i];j!=-1;j=e[j][1])
      {
          int v=e[j][0];
          if(scc[i]!=scc[v])
        {
            if(e[j][2]<mincost_to_v[scc[v]])
             {
                 mincost_to_v[scc[v]]=e[j][2];
             }
        }
      }
    int sums=0;
    for(int i=1;i<=numb;i++)
        {
            if(mincost_to_v[i]!=inf)    //起点
             sums+=mincost_to_v[i];
        }
   printf("%d\n",sums);
}
void read_build()
{
    int aa,bb,cc;
    for(int i=0;i<m;i++)
    {
        scanf("%d%d%d",&aa,&bb,&cc);
        adde(aa,bb,cc);
    }
}
void init()
{
    numb=times=nume=0;
    for(int i=0;i<maxv;i++)
      {
          head[i]=-1;
          ins[i]=dfn[i]=low[i]=scc[i]=vis[i]=0;
          mincost_to_v[i]=inf;
      }
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        init();
        read_build();
        solve();
    }
    return 0;
}


转载于:https://www.cnblogs.com/yezekun/p/3925692.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生系统,可以根据不同地区的特征定制化生政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值