LA 4287(p322)----Proving Equivalences

本文介绍了一个使用Tarjan算法求解强连通分量的问题,并详细解释了如何通过该算法找到图中的所有强连通分量,进而计算出缩点后的DAG图中入度为0和出度为0的点个数,最终确定问题的最优解。

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

#include<bits/stdc++.h>
#define debu
using namespace std;
const int maxn=1e5+50;
int s[maxn];
int v[maxn];
int dfn[maxn];
int scc[maxn];
int low[maxn];
int sum1,sum2;
int n,m,all,top,num;
int din[maxn],dout[maxn];
vector<int> g[maxn];
void init()
{
    all=0;
    top=0;
    num=0;
    sum1=0;
    sum2=0;
    memset(s,0,sizeof(s));
    memset(v,0,sizeof(v));
    memset(dfn,0,sizeof(dfn));
    memset(low,0,sizeof(low));
    memset(scc,0,sizeof(scc));
    for(int i=0; i<=n; i++) g[i].clear();
}
void Find(int u)
{
    all++;
    dfn[u]=all;
    low[u]=all;
    top++;
    s[top]=u;
    v[u]=true;
    for(int i=0; i<g[u].size(); i++)
    {
        int j=g[u][i];
        if(dfn[j]==0)
        {
            Find(j);
            low[u]=min(low[u],low[j]);
        }
        else
        {
            if(v[j])
                low[u]=min(low[u],dfn[j]);
        }
    }
    if(low[u]==dfn[u])
    {
        num++;
        while(s[top+1]!=u)
        {
            scc[s[top]]=num;
            v[s[top]]=false;
            top--;
        }
    }
}
void make()
{
    for(int i=1; i<=n; i++)
        if(dfn[i]==0) Find(i);
}
void solve()
{
    memset(din,0,sizeof(din));
    memset(dout,0,sizeof(dout));
    for(int u=1; u<=n; u++)
        for(int j=0; j<g[u].size(); j++)
        {
            int v=g[u][j];
            if(scc[u]!=scc[v])
            {
                dout[scc[u]]=1;
                din[scc[v]]=1;
            }
        }
    for(int i=1; i<=num; i++)
    {
        if(!din[i]) sum1++;
        if(!dout[i]) sum2++;
    }
    int ans=(num!=1)?max(sum1,sum2):0;
    printf("%d\n",ans);
}
int main()
{
#ifdef debug
    freopen("in.in","r",stdin);
#endif // debug
    int t;
    scanf("%d",&t);
    while(t--)
    {
        init();
        scanf("%d%d",&n,&m);
        for(int i=0; i<m; i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            g[x].push_back(y);
        }
        make();
        solve();
    }
    return 0;
}

题目地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2288

题解:Tarjan求强连通分量后缩点,设缩点后DAG图中入度为0点个数为sum1,出度为0点个数为sum2,则ans=max(sum1,sum2)(注意当原图已经强连通时,ans=0)。

内容概要:本文详细探讨了基于阻尼连续可调减振器(CDC)的半主动悬架系统的控制策略。首先建立了CDC减振器的动力学模型,验证了其阻尼特性,并通过实验确认了模型的准确性。接着,搭建了1/4车辆悬架模型,分析了不同阻尼系数对悬架性能的影响。随后,引入了PID、自适应模糊PID和模糊-PID并联三种控制策略,通过仿真比较它们的性能提升效果。研究表明,模糊-PID并联控制能最优地提升悬架综合性能,在平顺性和稳定性间取得最佳平衡。此外,还深入分析了CDC减振器的特性,优化了控制策略,并进行了系统级验证。 适用人群:从事汽车工程、机械工程及相关领域的研究人员和技术人员,尤其是对车辆悬架系统和控制策略感兴趣的读者。 使用场景及目标:①适用于研究和开发基于CDC减振器的半主动悬架系统的工程师;②帮助理解不同控制策略(如PID、模糊PID、模糊-PID并联)在悬架系统中的应用及其性能差异;③为优化车辆行驶舒适性和稳定性提供理论依据和技术支持。 其他说明:本文不仅提供了详细的数学模型和仿真代码,还通过实验数据验证了模型的准确性。对于希望深入了解CDC减振器工作原理及其控制策略的读者来说,本文是一份极具价值的参考资料。同时,文中还介绍了多种控制策略的具体实现方法及其优缺点,为后续的研究和实际应用提供了有益的借鉴。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值