Problem 2169 shadow

Accept: 141 Submit: 421
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
YL是shadow国的国王,shadow国有N个城市。
为了节省开支,shadow国仅仅有N-1条道路,这N-1条道路使得N个城市连通。某一年,shadow国发生了叛乱,叛军占据了多个城市,王都岌岌可危。
王都为编号为1的城市,除了王都外有K个城市有YL的军队。如今这K支军队要向王都进军。而且消灭沿途经过的城市中的叛军。现给出N个城市的道路情况以及城市的叛军数量,问总共须要消灭多少叛军?
Input
第一行输入两个整数N,K,接下来输入N(1<=N<=100000)个整数Ai(0<=Ai<=10000),表示第i个城市的叛军数量。接下来输入K个大于等于1且小于等于N的整数。表示有军队的城市的编号。
数据保证王都以及有军队的城市没有叛军。接下来输入N-1行。每行两个整数u、v,表示连接u和v的一条道路。
每支军队仅仅能沿着道路走,而且是其所在城市与王都之间的最短路线走。
Output
输出一行一个整数表示消灭的叛军数量。
Sample Input
0 3 0 0
3 4
1 2
2 3
2 4
Sample Output
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;
}
Problem 2169 shadow的更多相关文章
- 福州大学 Problem 2169 shadow
http://acm.fzu.edu.cn/problem.php?pid=2169 思路:建立一个邻接表,利用搜索中回溯把走过的路标记为1,然后把这些标记为1的值全部加起来. Problem 216 ...
- FZU Problem 2169 shadow
http://acm.fzu.edu.cn/problem.php?pid=2169 题目大意: S王国有N个城市,有N-1条道路.王都为编号1的城市.叛军驻扎在很多城市.除了王都外有K个城市有军队, ...
- FZU 2169 shadow (用了一次邻接表存边,树形DP)
Accept: 28 Submit: 97 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description YL是shadow国的国 ...
- FZU 2169 shadow spfa
题目链接:shadow 好佩服自己耶~~~好厉害~~~ 麻麻再也不用担心我的spfa 和 邻接表技能了~~~ spfa 记录最短路径. #include <stdio.h> #includ ...
- FZU 2092 收集水晶(记忆化搜索)
Problem 2092 收集水晶 Accept: 101 Submit: 439 Time Limit: 5000 mSec Memory Limit : 32768 KB Problem Desc ...
- FZU2169 shadow题解
http://acm.fzu.edu.cn/problem.php?pid=2169 Problem Description YL 是shadow国的国王,shadow国有N个城市.为了节省开支,sh ...
- Tutorial - Deferred Rendering Shadow Mapping 转
http://www.codinglabs.net/tutorial_opengl_deferred_rendering_shadow_mapping.aspx Tutorial - Deferred ...
- Linear or non-linear shadow maps?
Quote: Original post by RobMaddisonI understand that, for aliasing mitigation, it might be beneficia ...
- 2014 Super Training #10 C Shadow --SPFA/随便搞/DFS
原题: FZU 2169 http://acm.fzu.edu.cn/problem.php?pid=2169 这题貌似有两种解法,DFS和SPFA,但是DFS怎么都RE,SPFA也要用邻接表表示边, ...
随机推荐
- Dos关闭进程命令
netstat -ao 查找占用端口的进程 taskkikk /pid 端口pid /f
- javascriptDOM编程艺术_学习笔记_知识点 DOM
第三章 getElementById 返回一个与那个有着给定id属性值的元素节点对应的对象. document.getElementById(id) 下面一个例子: document.get ...
- hdu 2874Connections between cities LCA
题目链接 给n个城市, m条边, q个询问, 每个询问, 输出城市a和b的最短距离, 如果不联通, 输出not connected. 用并查集判联通, 如果不连通, 那么两个联通块之间加一条权值很大的 ...
- psycopg2接口的基本用法
转载自:http://zhiwei.li/text/2012/02/05/psycopg2接口的基本用法/ 与其他实现了DB API 2.0协议的其他数据库用户基本一致. import psycopg ...
- IOS 特定于设备的开发:Info.plist属性列表的设置
应用程序的Info.plist属性列表使你能够在向iTunes提交应用程序时指定应用程序的要求.这些限制允许告诉iTunes应用程序需要哪些设备特性. 每个IOS单元都会提供一个独特的特性集.一些设备 ...
- 【转】使用Boost Graph library(二)
原文转自:http://shanzhizi.blog.51cto.com/5066308/942972 让我们从一个新的图的开始,定义一些属性,然后加入一些带属性的顶点和边.我们将给出所有的代码,这样 ...
- hdoj 3062 Party(2-SAT)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3062 思路分析:将问题转换为2-SAT问题,需要注意的是将命题转换为有向图的方法:命题中A1, A2, ...
- HDU 1104 Remainder( BFS(广度优先搜索))
Remainder Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 【剑指offer】面试题43:n个骰子的点数
第一种思路是,每一个骰子的点数从最小到最大,如果为1-6,那么全部的骰子从最小1開始,我们如果一种从左向右的排列,右边的最低,索引从最低開始,推断和的情况. def setTo1(dices, sta ...
- Android实现应用下载并自动安装apk包
安装: ? 1 2 3 4 5 String str = "/CanavaCancel.apk"; String fileName = Environment.getExterna ...