ssl1333-地鼠的困境【二分图,最大匹配,图论】

探讨了n个地鼠在限定时间内返回m个地洞的问题,通过编程实现匈牙利算法来解决最大匹配问题,确保尽可能多地让地鼠安全进入地洞。

正题


大意

有n个地鼠有m个地洞,每只地鼠的速度都是v。若不在s秒之内回到地洞就会狗带,每只地洞只能躲一只地鼠,求能活下来多少只


代码

#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
struct line{
    int x,y,next;
}a[10001];
int link[101],n,m,ls[101],xx,yy,ss,t,w,si,vi;
double dx[101],dy[101],zx,zy;
double s,v;
bool cover[101];
double pows(double x)
{
    return x*x;
}
double dis(double x1,double y1,double x2,double y2)
{
    return sqrt(pows(x1-x2)+pows(y1-y2));
}//计算距离
bool find(int x)//寻找增广链
{
    int p=0;
    for (int q=ls[x];q;q=a[q].next){
      if (!cover[a[q].y])
      {
        p=link[a[q].y];
        link[a[q].y]=x;
        cover[a[q].y]=true;
        if (!p || find(p)) return true;
        link[a[q].y]=p;
      }
    }
    return false;
}
int main()
{
    scanf("%d",&t);
    for (int i=1;i<=t;i++)
    {
        memset(link,0,sizeof(link));
        memset(ls,0,sizeof(ls));
        w=0;ss=0;
        scanf("%d%d%d%d",&n,&m,&si,&vi);
        s=si;v=vi;
        for (int i=1;i<=n;i++)
        {
            scanf("%lf%lf",&dx[i],&dy[i]);
        }
        double q=0;
        for (int i=1;i<=m;i++)
        {
            scanf("%lf%lf",&zx,&zy);
            for (int j=1;j<=n;j++)
            {
                q=dis(dx[j],dy[j],zx,zy);
                if (q<=s*v)//可以跑到
                {
                    a[++w].x=j;
                    a[w].y=i;
                    a[w].next=ls[j];
                    ls[j]=w;
                }
            }
        }
        for (int i=1;i<=n;i++)
        {
            memset(cover,false,sizeof(cover));
            if (!find(i)) ss++;
        }e
        printf("%d\n",ss);
    }
}

转载于:https://www.cnblogs.com/sslwyc/p/8847857.html

内容概要:本文系统研究了基于粒子群算法(PSO)的微网优化调度方法,并重点引入需求响应机制以提升微电网运行的经济性与可靠性。研究构建了一个综合考虑风能、光伏、储能、柴油发电机、燃气轮机等多种分布式能源的微电网模型,建立了以最小化系统综合运行成本为目标,涵盖燃料成本、环境污染惩罚、购售电费用及需求响应激励成本的多目标优化模型。文中详细阐述了粒子群算法的数学原理及其在求解此类非线性、多维度、带约束的复杂优化问题中的独特优势,通过Matlab编程实现了完整的算法流程与仿真分析,验证了所提方法在有效降低系统运行成本、平抑负荷波动、提高可再生能源消纳率以及增强微网应对需求侧变化灵活性方面的显著效果。; 适合人群:具备一定电力系统、优化理论基础和Matlab编程能力的高校研究生、从事新能源、智能电网及相关领域研究的科研人员,以及致力于微电网规划与运行优化的工程技术人员。; 使用场景及目标:①用于教学与科研,深入理解微网优化调度的核心挑战、数学建模方法及智能优化算法的应用;②为实际微电网项目的规划设计、运行策略制定提供可靠的算法工具和技术参考;③作为智能优化算法(如PSO)在综合能源系统中成功应用的典型案例,推动先进算法在能源互联网领域的研究与实践。; 阅读建议:建议读者在学习过程中,务必结合文中的Matlab代码进行上机实践,重点关注目标函数的设计逻辑、各类物理约束(如功率平衡、设备出力、储能容量等)的数学表达,以及PSO算法中关键参数(如种群规模、惯性权重、学习因子)的设置与调优技巧,可通过改变参数或扩展模型(如加入更多能源形式或转化为多目标优化)来加深理解和掌握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值