【SCOI2007】蜥蜴 网络流

本文探讨了一种基于网络地图的蜥蜴逃逸问题,通过最大流算法解决蜥蜴从不稳定石柱上逃逸至边界的最优方案。文章详细介绍了如何将问题转化为图论中的最大流问题,并提供了具体的实现代码。

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

题目描述

  在一个r行c列的网络地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。
  每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴不能落脚。任何时刻不能有两只蜥蜴在同一个石柱上。

题目大意

题目大意

数据范围

数据范围

样例输入

5 8 2
00000000
02000000
00321100
02000000
00000000
. . . . . . . .
. . . . . . . .
. . L L L L . .
. . . . . . . .
. . . . . . . .

样例输出

1

解题思路

拆点,如果一个点能跳向另一个点则前一个点的出点,向第二个点的入点连边。
如果能跳出边界则出点向T连边。
如果起始为蜥蜴则S向入点连边。
答案则为蜥蜴总数-最大流。

代码

#include <bits/stdc++.h>
#define Maxn 233333
#define Maxe 233333
#define ha(x,y) (((x)-1)*c+(y))
using namespace std;
inline int Getint(){int x=0,f=1;char ch=getchar();while('0'>ch||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
inline int Getval(){char ch=getchar();while(!isdigit(ch))ch=getchar();return ch-'0';}
inline char Getch(){char ch=getchar();while(ch!='.'&&ch!='L')ch=getchar();return ch;}
int S,T,N,cnt=0,dis[Maxn],GAP[Maxn],h[Maxn],vl[25][25],r,c,d;
struct node{int to,next,v,pair;}e[Maxe];
void AddEdge(int x,int y,int v,int pair){e[cnt]=(node){y,h[x],v,pair};h[x]=cnt;}
void AddEdge(int x,int y,int v){AddEdge(x,y,v,++cnt+1);AddEdge(y,x,0,++cnt-1);}
int GetDis(int x,int y,int xx,int yy){return (x-xx)*(x-xx)+(y-yy)*(y-yy);}
int SAP(int x,int Maxflow){
    if(x==T)return Maxflow;
    int tmp=Maxflow;
    for(int p=h[x];p;p=e[p].next){
        int y=e[p].to;
        int flow=min(e[p].v,tmp);
        if(flow&&dis[x]==dis[y]+1){
            int ret=SAP(y,flow);
            tmp-=ret;
            e[p].v-=ret;
            e[e[p].pair].v+=ret;
            if(!tmp||dis[S]==N)return Maxflow-tmp;
        }
    }
    if(--GAP[dis[x]]==0)dis[S]=N;
    else GAP[++dis[x]]++;
    return Maxflow-tmp;
}
int SAP(){
    memset(GAP,0,sizeof(GAP));
    memset(dis,0,sizeof(dis));
    GAP[0]=N;
    int Ans=0;
    while(dis[S]<N)Ans+=SAP(S,1<<30);
    return Ans;
}
int main(){
    r=Getint(),c=Getint(),d=Getint();
    int tot=0;
    S=0,T=r*c*2+1,N=T+1;
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++)
            vl[i][j]=Getval();
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++)
            if(vl[i][j])
                AddEdge(ha(i,j),ha(i,j)+r*c,vl[i][j]);
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++)
            if(Getch()=='L')
                AddEdge(S,ha(i,j),1),tot++;
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++){
            if(!vl[i][j])continue;
            if(i<=d||j<=d||(r-i+1)<=d||(c-j+1)<=d)
                AddEdge(ha(i,j)+r*c,T,1<<30);
            for(int i1=1;i1<=r;i1++)
                for(int j1=1;j1<=c;j1++)
                    if((!(i==i1&&j==j1))&&vl[i1][j1]&&GetDis(i,j,i1,j1)<=d*d)
                        AddEdge(ha(i,j)+r*c,ha(i1,j1),1<<30);
        }
    cout<<tot-SAP();
    return 0;
}

转载于:https://www.cnblogs.com/Cedric341561/p/6811010.html

<think>好的,我现在需要帮助用户解决ROG玩家国度冰锐2笔记本在低负载时偶尔蓝屏的问题。首先,我得仔细看看用户提供的配置和问题描述。配置方面,笔记本用的是锐龙R9-4900HS处理器,16GB DDR4双通道内存,512GB PCIe固态硬盘,RTX2060显卡,还有240Hz的15.5寸电竞屏。问题出现在低负载情况下,比如浏览网页时偶尔蓝屏,但高负载如游戏或烤机时没问题。 首先,我应该考虑可能导致低负载蓝屏的原因。低负载和高负载下的系统行为不同,可能涉及电源管理、驱动兼容性、硬件稳定性或者系统设置等方面。 第一步,可能的原因之一是电源管理设置。Windows系统在低负载时会降低电压或频率以节省能耗,但有时候这可能导致不稳定,尤其是如果BIOS或电源管理驱动有问题的话。用户可能需要在电源选项中调整设置,或者更新BIOS和芯片组驱动。 其次,内存问题也是一个常见因素。尽管双通道内存通常更稳定,但低负载时可能触发某些不常见的内存错误。用户可能需要运行内存诊断工具,比如Windows自带的内存检测工具,或者使用MemTest86进行更彻底的测试。另外,检查内存条是否插紧,或者尝试单条内存测试,排除兼容性问题。 第三,显卡驱动的问题。虽然用户在高负载下使用显卡没问题,但低负载时驱动可能有bug导致蓝屏。建议更新或回滚显卡驱动,特别是使用华硕官网或NVIDIA官方提供的最新驱动,确保兼容性。此外,检查是否启用了混合图形切换功能,可能在低负载时切换显卡模式时出现问题,可以尝试禁用该功能。 接下来,系统文件和软件冲突也需要考虑。使用系统文件检查器(sfc /scannow)和DISM工具修复系统文件。同时,检查最近安装的软件或更新,是否有冲突,特别是那些在后台运行的程序,可能在低负载时引发问题。 另外,硬盘健康状态也不能忽视。虽然用户用的是PCIe固态,但使用CrystalDiskInfo等工具检查硬盘SMART状态,确认没有坏道或固件问题。同时,确保固态硬盘的固件是最新的,避免兼容性问题。 还有,温度管理方面。虽然低负载时温度应该不高,但散热系统的异常,比如风扇停转或散热不良,可能在低负载时导致某些部件温度波动异常,触发保护机制。检查散热系统是否正常工作,清理灰尘,确保通风良好。 最后,系统日志分析。查看Windows事件查看器中的系统日志,找到蓝屏时的错误代码和相关信息,比如DRIVER_POWER_STATE_FAILURE或其他特定代码,这能帮助更准确地定位问题根源。 可能的解决步骤包括:更新BIOS和所有驱动,尤其是芯片组和显卡驱动;调整电源管理设置为高性能模式;运行内存和硬盘检测;检查系统文件和软件冲突;分析系统日志获取具体错误信息。如果以上步骤无效,可能需要联系华硕售后进行硬件检测,特别是主板或电源模块的问题。</think>根据您描述的ROG冰锐2笔记本配置及问题表现(低负载蓝屏,高负载正常),以下是逐步排查与解决方案: --- ### **一、核心原因推测** 低负载蓝屏+高负载稳定的矛盾现象,通常与以下因素相关: 1. **电源管理策略冲突**(CPU/显卡节能模式不稳定) 2. **内存兼容性/时序问题**(低负载时内存频率降低引发错误) 3. **混合显卡切换逻辑缺陷**(核显与独显切换异常) 4. **系统驱动/固件版本过旧**(尤其是AMD芯片组与NVIDIA显卡驱动) --- ### **二、具体解决步骤** #### **第一步:更新BIOS与驱动程序** - **BIOS更新**: 1. 访问[华硕官网支持页面](https://www.asus.com.cn/support/),搜索“冰锐2”型号,下载最新BIOS文件。 2. 按官方教程更新BIOS(通常需进入BIOS界面通过EZ Flash工具操作)。 - **驱动更新**: 1. **AMD芯片组驱动**:安装官网提供的“Ryzen 9 4900HS”专用驱动。 2. **NVIDIA显卡驱动**:通过GeForce Experience或官网下载**Studio版本驱动**(稳定性优于Game Ready驱动)。 3. **核显驱动**:确保AMD Radeon Graphics驱动为最新版。 #### **第二步:调整电源管理设置** 1. 打开Windows **控制面板 > 电源选项**,选择“高性能”模式。 2. 进入“更改计划设置 > 更改高级电源设置”: - **PCI Express > 链接状态电源管理**:设置为“关闭”。 - **处理器电源管理 > 最小处理器状态**:调整为**50%以上**(避免低频电压不稳)。 #### **第三步:内存稳定性测试** 1. 运行 **Windows内存诊断工具**: - 搜索“Windows内存诊断”,选择“立即重新启动并检查问题”。 2. 使用 **MemTest86** 深度测试: - 制作U启动,运行4小时以上测试,观察是否有报错。 3. 若发现错误: - 尝试拔插内存条,清洁金手指。 - 在BIOS中手动设置内存频率至**2133MHz**(降低频率测试稳定性)。 #### **第四步:禁用混合显卡切换** 1. 进入NVIDIA控制面板,选择“管理3D设置 > 首选图形处理器”为**高性能NVIDIA处理器**。 2. 在BIOS中查找“Hybrid Graphics”或“Optimus”选项,将其关闭(部分机型可能无此选项)。 #### **第五步:系统文件与软件排查** 1. 以管理员身份运行CMD,输入: ```bash sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth ``` 2. 检查最近安装的软件(尤其是杀毒软件、系统优化工具),尝试卸载后观察是否蓝屏。 #### **第六步:分析蓝屏日志** 1. 打开 **事件查看器**(Event Viewer),定位蓝屏时间点的**关键错误日志**(事件ID 41、1001等)。 2. 记录蓝屏错误代码(如`DRIVER_POWER_STATE_FAILURE`、`SYSTEM_THREAD_EXCEPTION`等),针对性搜索解决方案。 --- ### **三、进阶排查(若问题未解决)** - **SSD固件更新**:通过华硕官网或硬盘厂商工具(如WD/Samsung Magician)更新固态硬盘固件。 - **禁用C-State节能**:在BIOS中找到“CPU C-State”选项,设置为“Disabled”(可能增加功耗但提升稳定性)。 - **联系售后**:若上述步骤无效,可能是主板供电模块故障,建议联系华硕服务中心检测。 --- ### **总结建议** 优先执行**BIOS更新+驱动更新+电源管理调整**组合方案,多数类似问题可通过此解决。若问题依旧,再逐步深入排查内存与硬件故障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值