NOIP 2012 Day2 T3 疫情控制

本文介绍了一种复杂的路径查找算法,该算法通过深度优先搜索、二分查找等技术,在树状结构中寻找最优路径并解决资源分配问题。文章详细阐述了算法的实现过程,包括节点遍历、路径更新和资源分配验证等多个步骤。
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<vector>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<bitset>
using namespace std;
struct data
{
    int l;
    long long w;
};
    data k,need[50005];
vector <data> city[1005];
int n,m,a,b,ans,kk,cnt;
int tt,ff;
long long c,mid,l=1,r;
long long lt[50005],send[50005];
int zz[50005],army[50005],dis[50005][20],f[50005][20];
int dep[50005],stay[50005],one[50005],g[50005][2],sec[50005];
bool vis[50005],vis2[50005],p[50005];
bool comp(data x,data y)
{
    if (x.w>=y.w)  return true;
    return false;
}
bool comp2(int x,int y)
{
    if (x>=y)  return true;
    return false;
}
void dfs(int x)
{
    vis[x]=true;
    for (int i=0;i<city[x].size();i++)
        if (!vis[city[x][i].l])
        {
            dep[city[x][i].l]=dep[x]+1;
            dis[city[x][i].l][0]=city[x][i].w;
            f[city[x][i].l][0]=x;
            dfs(city[x][i].l);
        }
}
void init()
{//here
    for (int j=1;(1<<j)<=n;j++)
        for(int i=1;i<=n;i++)
        {
            f[i][j]=f[f[i][j-1]][j-1];
            dis[i][j]=dis[f[i][j-1]][j-1]+dis[i][j-1];
        }
}
void up(int x,int s)
{
    for (int i=0;dis[x][i]<=lt[s];i++)
    {
        p[x]=false;
        x=f[x][i];
        p[x]=true;
        army[s]=x;
        lt[s]-=dis[x][i];
        if (lt[s]<lt[stay[x]])  stay[x]=s;
        if (dep[x]==2)  return ;
    }
    return ;
}
int dfs2(int x)
{
    int s=0;
    vis2[x]=true;
    for (int i=0;i<city[x].size();i++)
        if (!vis2[city[x][i].l])
        {
            dfs2(city[x][i].l);
            if (p[city[x][i].l]==false)  break;
            else  s++;
        }
    if (s==city[x].size()){p[x]=true;return 2;}
    if (p[x]==true)  return 1;
    return 0;
}
int ss()
{
    if (ff<tt) return 0;
    sort(need+1,need+1+tt,comp);
    sort(send+1,send+1+ff,comp2);
    for (int i=1;i<=tt;i++)
        if (need[i].w>send[i])  return 1;
    return 0;
}
int check()
{
    tt=0,ff=0;
    vis2[1]=true;
        for (int i=0;i<city[1].size();i++)
        {
            int t=dfs2(city[1][i].l);
            one[city[1][i].l]=t;
            if (t==0){
                need[++tt].l=city[1][i].l;
                need[tt].w=city[1][i].w;
            }
        }
    for (int i=1;i<=m;i++)
        if (dep[army[i]]==2)
        {
            if (one[army[i]]==1&&stay[army[i]]!=i)
            {
                if (lt[i]-g[i][0]>=0)
                {
                    lt[i]-=g[i][0];
                    send[++ff]=lt[i];
                }
            }
            if (one[army[i]]==2&<[i]-g[i][0]>=0)
            {
                lt[i]-=g[i][0];
                    send[++ff]=lt[i];
            }
        }
    return ss();
}
int main()
{
    freopen ("blockade.in","r",stdin);
    //freopen ("blockade.out","w",stdout);
    scanf ("%d",&n);
    for (int i=1;i<=n-1;i++)
    {
        scanf ("%d%d%lld",&a,&b,&c);
        k.l=b;k.w=c;city[a].push_back(k);
        k.l=a;k.w=c;city[b].push_back(k);
        r+=c;
        if (a==1||b==1)  kk++;
    }
    scanf ("%d",&m);
    if (m<kk){printf ("-1");return 0;}
    for (int i=1;i<=m;i++)
    {
        scanf ("%d",&a);
        zz[++cnt]=a;
        army[cnt]=a;
        p[a]=true;
    }
    vis[1]=true;
    for (int i=0;i<city[1].size();i++)
    {
        g[city[1][i].l][0]=city[1][i].w;
        f[city[1][i].l][0]=city[1][i].l;
        dep[city[1][i].l]=2;
        dfs(city[1][i].l);
    }
    init();//here
    lt[0]=1e14;
    while (l<r)
    {
        mid=(l+r)>>1;
        for (int i=1;i<=cnt;i++)
        {
            lt[zz[i]]=mid;
            up(zz[i],i);
        }
        if (check())  l=mid+1;//and here
        else r=mid;
    }
    printf ("%d",r);
    return 0;
}

【从高压输电线的架空地线中汲取电能】一个25千瓦受控电源从735千伏线路的架空地线中汲取电能的SimPowerSystems模型(Simulink仿真实现)内容概要:本文介绍了一个基于SimPowerSystems的Simulink仿真模型,用于模拟从735千伏高压输电线的架空地线中汲取25千瓦电能的受控电源系统。该模型聚焦于高压输电线路中架空地线的能量回收技术,通过仿真手段实现对电能采集过程的建模与控制策略验证,体现了电力系统中新型能源获取方式的技术可行性与工程应用潜力。文中还提及该资源属于一系列电力系统仿真研究的一部分,涵盖微电网、储能优化、碳流追踪、鲁棒调度等多个前沿方向,配套提供Matlab/Simulink代码及网盘资料链接,便于科研人员复现与拓展研究。; 适合人群:具备电力系统基础知识、熟悉Matlab/Simulink仿真环境,从事电力工程、能源回收或智能电网相关研究的科研人员及研究生;有一定编程与建模仿真经验的高年级本科生或工程技术人员。; 使用场景及目标:①研究高压输电线路中架空地线的能量回收机制与建模方法;②掌握基于Simulink的电力系统仿真技术,特别是受控电源与电网交互的动态特性分析;③为开展能源 harvesting、分布式供能、电力电子变换器控制等相关课题提供参考模型与技术支撑; 阅读建议:建议结合提供的仿真模型文件进行实操演练,重点理解系统结构设计、参数设置与控制逻辑实现;同时可延伸学习文档中提到的其他电力系统优化与仿真案例,以拓宽研究视野和技术积累。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值