首页 > 其他分享 >P3393 逃离僵尸岛

P3393 逃离僵尸岛

时间:2023-07-14 10:22:20浏览次数:45  
标签:bfs 僵尸 int long edge 逃离 vis cost2 P3393

P3393 逃离僵尸岛 - 洛谷 

多源BFS ---------->把所有直接占领点压入队列,bfs求解距离

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl "\n"
#define int long long 

const int N=5e5+5;

std::vector<int>edge[N];
int n,m,k,s,cost1,cost2;
int occupy[N],val[N],dist[N],vis[N],cant[N];

void bfs(){
    queue<pair<int,int>>q;
    for(int i=1;i<=n;i++)q.push({occupy[i],0});
    while(!q.empty()){
        auto [x,dis]=q.front();
        q.pop();
        if(dis>s)continue;
        if(vis[x])continue;
        vis[x]=1;
        val[x]=cost2;
        for(auto y:edge[x]){
            if(!vis[y])q.push({y,dis+1});
        }
    }    
}

void Dijkstra(int s){
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
    for(int i=1;i<=n;i++)dist[i]=21474836476666;
    q.push({0,1});
    dist[1]=0;
    while(!q.empty()){
        auto [v,x]=q.top();
        q.pop();
        for(auto y:edge[x]){
            if(!cant[y]&&v+val[y]<dist[y]){
                dist[y]=v+val[y];
                q.push({dist[y],y});
            }
        }
    }
}


signed main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n>>m>>k>>s;
    cin>>cost1>>cost2;
    for(int i=1;i<=k;i++){
        cin>>occupy[i];
        cant[occupy[i]]=1;
    }
    for(int i=1;i<=m;i++){
        int x,y;cin>>x>>y;
        edge[x].push_back(y);
        edge[y].push_back(x);
    }
    bfs();
    for(int i=2;i<=n;i++){
        if(!vis[i])val[i]=cost1;
    }
    Dijkstra(1);
    if(val[n]==cost1)cout<<dist[n]-cost1<<endl;
    else cout<<dist[n]-cost2<<endl;
    return 0;
}

 

标签:bfs,僵尸,int,long,edge,逃离,vis,cost2,P3393
From: https://www.cnblogs.com/zhujio/p/17552995.html

相关文章

  • 当心僵尸:过时Linux内核的安全风险
    设备年年新,内核永不换。早该被淘汰的Linux内核版本,依然阴魂不散地扎根在各种各样的设备中,驱动着这些设备如同《行尸走肉》的丧尸游荡在世界各地。Linux内核安全漏洞是新闻头条常客。最近又有一个隐身十年之久的严重内核漏洞被曝光了。但是,这到底代表着什么现实意义呢?为什么......
  • Linux Subreaper 机制及内核态逃离方法(PR_SET_CHILD_SUBREAPER, prctl, systemed)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  由于某些其他的原因,我们在测试另外一个问题的时候发现了一个奇怪的现象:在我们一直朴素的认知下,如果一个程序创建了parent-process和child-......
  • P1095 守望者的逃离(C++_贪心_模拟/dp)
    题目描述恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为17m/s,以这样的速度......
  • 植物大战僵尸
    #include<iostream>#include<windows.h>usingnamespacestd;DWORDYG1=0;HANDLEhProcess=NULL;DWORDaddress1=0x006A9EC0;//第一个房间门的编号DWORDaddress2;intvzlue=0;boolp1(){DWORDyangguangAddress=YG1+0x5560;intzZyGZ=0;boo......
  • 如何避免僵尸进程(转)
    父进程中调用wait()等待回收子进程两次fork()来避免僵尸进程   在父进程fork()之前安装SIGCHLD信号处理函数,并在此handler函数中调用waitpid()等待子进程结束在父进程中加入一条语句:signal(SIGCHLD,SIG_IGN);表示父进程忽略SIGCHLD信号杀死父进程,这样子进程就由init进程......
  • 浅谈僵尸网络利器:Fast-flux技术——只是一些特定的apt组织才使用,倒是很少在恶意软件的
    DynamicResolution: FastFluxDNSOthersub-techniquesofDynamicResolution(3)AdversariesmayuseFastFluxDNStohideacommandandcontrolchannelbehindanarrayofrapidlychangingIPaddresseslinkedtoasingledomainresolution.Thistechniqueus......
  • linux 性能自我学习 ———— 不可中断进程和僵尸进程 [四]
    前言简单介绍一下不可中断进程和僵尸进程。正文先来看下进程的状态:那么这一列的状态是什么呢?R是Running或Runnable的缩写,表示进程在cpu的就绪队列中,正在运行或者正在等待运行。D是disksleep的缩写,也就是不可中断睡眠,一般表示进程正在跟硬件交互,并且交互过程不允......
  • 利用CTU-13数据集进行僵尸网络检测
    写在前面,CTU-13的数据集示例:StartTime,Dur,Proto,SrcAddr,Sport,Dir,DstAddr,Dport,State,sTos,dTos,TotPkts,TotBytes,SrcBytes,Label2011/08/1009:46:59.607825,1.026539,tcp,94.44.127.113,1577,->,147.32.84.59,6881,S_RA,0,0,4,276,156,flow=Background-Established-cmpg......
  • twitter僵尸网路检测,只能twitter自己做这种算法
     twitter僵尸网路检测数据样例 TwitterbotdetectorIntheprevioussections,wesawhowtobuildamachinelearning-basedbotnetdetector.Inthisnewproject,wearegoingtodealwithadifferentprobleminsteadofdefendingagainstbotnetmalware.Weareg......
  • P1853 守望者的逃离
    #include<iostream>usingnamespacestd;intmain(){intm,s,t,a=0,b=0;cin>>m>>s>>t;for(inti=1;i<=t;i++){a+=17;if(m>=10){m-=10;b+=60;......