Problem 2169 shadow

Problem 2169 shadow

大家好,又见面了,我是全栈君。

Problem 2169 shadow
 Problem 2169 shadow

Accept: 141    Submit: 421
Time Limit: 1000 mSec    Memory Limit : 32768 KB

Problem 2169 shadow Problem Description

YL是shadow国的国王,shadow国有N个城市。

为了节省开支,shadow国仅仅有N-1条道路,这N-1条道路使得N个城市连通。某一年,shadow国发生了叛乱,叛军占据了多个城市,王都岌岌可危。

王都为编号为1的城市,除了王都外有K个城市有YL的军队。如今这K支军队要向王都进军。而且消灭沿途经过的城市中的叛军。现给出N个城市的道路情况以及城市的叛军数量,问总共须要消灭多少叛军?

Problem 2169 shadow Input

第一行输入两个整数N,K,接下来输入N(1<=N<=100000)个整数Ai(0<=Ai<=10000),表示第i个城市的叛军数量。接下来输入K个大于等于1且小于等于N的整数。表示有军队的城市的编号。

数据保证王都以及有军队的城市没有叛军。接下来输入N-1行。每行两个整数u、v,表示连接u和v的一条道路。

每支军队仅仅能沿着道路走,而且是其所在城市与王都之间的最短路线走。

Problem 2169 shadow Output

输出一行一个整数表示消灭的叛军数量。

Problem 2169 shadow Sample Input

4 2

0 3 0 0

3 4

1 2

2 3

2 4

Problem 2169 shadow Sample Output

3

http://acm.fzu.edu.cn/problem.php?pid=2169

/*从有军队的城市BFS遍历,找到王都。沿途累加被杀掉的叛军数
用两个数组存储邻边关系
*/
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 100005
struct list
{
    int val;
    int nxt;
}L[N*2]; //存储相临边的关系
struct point
{
  int val;
  int k_num;  //杀死敌军数
}p,q;
int enemy[N]; //叛军
int army[N];  //国军
int vis[N];   //标记是否訪问
int head[N];
int n,k,id;
void add(int u,int v) //把u连在v后面
{
    L[id].val=v;  //保存v的值,且拥有唯一id
    L[id].nxt=head[u]; //// v的next为head[u],这里head[u]表示u的头结点的id,且把它连在v的后面
    head[u]=id++;// 此时由于u的头结点已经连在v后面了,所以要更新头结点,把head[u]换成v的id
}
int bfs(int x)
{
    int ret=0;
    queue<point>s;
    p.val=x;
    p.k_num=enemy[x];
    s.push(p);
    vis[x]=1;
    while(!s.empty())
    {
        p=s.front();
        s.pop();
        if(1==p.val)   //找到目标点
            ret=p.k_num;
        for(int i=head[p.val];i!=0;i=L[i].nxt)
        {
            int v=L[i].val;
            if(0==vis[v])
            {
                vis[v]=1;
                q.val=v;
                q.k_num=p.k_num+enemy[v];
                s.push(q);
            }
        }
    }
    return ret;
}

int main()
{
    while(scanf(“%d%d”,&n,&k)!=EOF)
    {
        for(int i=1;i<=n;i++)
            scanf(“%d”,&enemy[i]);
        for(int i=1;i<=k;i++)
            scanf(“%d”,&army[i]);
        memset(vis,0,sizeof(vis));
        memset(head,0,sizeof(head));
        int ans=0;
        id=1;
        for(int i=1;i<=n-1;i++)
        {
            int u,v;
            scanf(“%d%d”,&u,&v);
            add(u,v);
            add(v,u);
        }
        for(int i=1;i<=k;i++)
        {
            if(0==vis[army[i]])
                ans+=bfs(army[i]);
        }
        printf(“%d\n”,ans);
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116046.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 宽度学习与深度学习中的时空转化问题

    宽度学习与深度学习中的时空转化问题ž在自然界中运动是绝对的,静止是相对的。这句话也说明了深度学习过去、现在、未来。由于我发现山东大学有个组和澳门大学陈俊龙团队的宽度学习、极限学习等。目前由于神经网络是黑盒研究、所以很多人利用反卷积和卷积可视化来解释这种微分和积分的编程,由于冗余和稀疏特性使用微积分或者差分求导数和偏导是必然。宽度学习文章和代码研究地址:http://www.broadlearning.ai在深度学习上目…

  • Spark常见20个面试题(含大部分答案)

    Spark常见20个面试题(含大部分答案)1、什么是宽依赖,什么是窄依赖?哪些算子是宽依赖,哪些是窄依赖?窄依赖就是一个父RDD分区对应一个子RDD分区,如map,filter或者多个父RDD分区对应一个子RDD分区,如co-partionedjoin宽依赖是一个父RDD分区对应非全部的子RDD分区,如groupByKey,ruduceByKey或者一个父RDD分区对应全部的子RDD分区,如未经协同划分的joinhttps:/……

  • rsyslogd内存占用率高_怎么减少系统内存占用

    rsyslogd内存占用率高_怎么减少系统内存占用用top,用ps都能看到。相伴的systemd-journalcpu和内存占用也很高。systemd-journal使用了持久化模式。其中一个服务1秒钟内打非常多的日志。一天好几个G。另外,sudojournalctl–verify也有错误输出。其他没什么异常。https://blog.csdn.net/qq_25518029/article/details/12001067…

  • _itemFailedToPlayToEnd: { kind = 1; new = 2; old = 0; }

    _itemFailedToPlayToEnd: { kind = 1; new = 2; old = 0; }

  • 搜索、推荐、广告系统等人工智能优质技术资源最全整理[通俗易懂]

    搜索、推荐、广告系统等人工智能优质技术资源最全整理[通俗易懂]前沿文章目录前沿开源地址[算法学习资料:AI_Tutorial](https://github.com/cbamls/AI_Tutorial)开源相关LuceneSolrElasticLucidWorks中文分词大公司阿里百度京东美团点评携程去哪儿搜狗一号店待分类开发应用理论基础源码解读常见问题其他人工智能领域文集算法学习资料:AI_Tutorial人工智能、AI架构、搜索系统、推荐系统…

  • C/C++指针详解之基础篇(史上最全最易懂指针学习指南!!!!)「建议收藏」

    C/C++指针详解之基础篇(史上最全最易懂指针学习指南!!!!)「建议收藏」目录一.变量的内存实质到1.1变量的实质1.2赋值给变量1.3变量在哪里?二.指针是个什么东西?三.二级指针(指针的指针)3.1定义与初始化3.2间接数据访问3.2.1.改变一级指针指向3.2.2改变N-1级指针的指向3.2.3二级指针的步长四.指针与数组4.1指针与数组名4.1.1通过数组名访问数组元素4….

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号