题目链接:shadow

好佩服自己耶~~~好厉害~~~

麻麻再也不用担心我的spfa 和 邻接表技能了~~~

spfa 记录最短路径。

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <queue>
#define maxn 100010
#define inf 1000000000
using namespace std; int n, k;
int num[maxn];
int army[maxn]; struct Node {
int v;
int nxt;
}edge[maxn]; // 对于edge[i]这条边,(u-----v)只保存v和上一条以u为起点的边的序号。u的信息保存在最后一条以u为起点的边上。 bool visQue[maxn]; //顶点是否已经入队列
int cnt[maxn]; // 顶点入队列的次数
int dis[maxn]; // 保存源点到每个点的最短距离 int head[maxn];
int tot;
bool visArmy[maxn]; // 判断叛军是否已经被消灭
int fa[maxn]; // 最短路过程中记录每个节点的前驱 void addEdge(int u, int v) {
edge[tot].v = v;
edge[tot].nxt = head[u];
head[u] = tot++;
} bool spfa(int sou) {
{ // 初始化
memset(visQue, 0, sizeof(visQue));
memset(cnt, 0, sizeof(cnt));
for (int i=0; i<maxn; ++i) {
dis[i] = inf;
}
} dis[sou] = 0;
queue<int>que;
que.push(sou);
visQue[sou] = 1;
cnt[sou]++; while(!que.empty()) {
int u = que.front();
que.pop();
visQue[u] = 0;
for (int i=u; i!=-1; i=edge[i].nxt) {
int v = edge[i].v;
if (dis[v] > dis[u] + 1) {
dis[v] = dis[u] + 1;
fa[v] = u;
if (!visQue[v]) { // 为什么在当前点被优化的时候才考虑是不是要把它加进队列呢?
que.push(v); // 只有当前点被优化了,与它相邻的点的最短距离才有可能被修改,此时加进队列以松弛以它为顶点的边。
visQue[v] = 1;
cnt[v]++;
if (cnt[v] >= n) return false;
}
}
}
}
return true;
} int sum(int src) {
int temp = 0;
while (fa[src] != -1) {
if (visArmy[src]) return temp;
if (!visArmy[src]) {
temp += num[src];
visArmy[src] = 1;
}
src = fa[src];
}
return temp + num[1];
} int main() {
while(cin >> n >> k) {
memset(head, -1, sizeof(head));
tot = 0;
memset(visArmy, 0, sizeof(visArmy)); for (int i=0; i<n; ++i) { //输入每个城市的叛军数量
cin >> num[i];
}
for (int i=0; i<k; ++i) {
cin >> army[i]; // 输入有军队的城市编号。讲道理,开始还想着,遍历军队的时候也要从n个城市里面去找,蠢了。
}
for (int i=0; i<n-1; ++i) {
int u, v;
cin >> u >> v;
addEdge(u, v);
} fa[1] = -1;
spfa(1); // 以1为源点找最短路
int ans = 0;
for (int i=0; i<k; ++i) {
ans += sum(army[i]); // sum()求当前有军队的城市能消灭的叛军。
//cout << sum(i) << "-----\n";
}
cout << ans << endl;
}
return 0;
}

  

FZU 2169 shadow spfa的更多相关文章

  1. FZU 2169 shadow (用了一次邻接表存边,树形DP)

    Accept: 28 Submit: 97 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description YL是shadow国的国 ...

  2. 2014 Super Training #10 C Shadow --SPFA/随便搞/DFS

    原题: FZU 2169 http://acm.fzu.edu.cn/problem.php?pid=2169 这题貌似有两种解法,DFS和SPFA,但是DFS怎么都RE,SPFA也要用邻接表表示边, ...

  3. 福州大学 Problem 2169 shadow

    http://acm.fzu.edu.cn/problem.php?pid=2169 思路:建立一个邻接表,利用搜索中回溯把走过的路标记为1,然后把这些标记为1的值全部加起来. Problem 216 ...

  4. Problem 2169 shadow

     Problem 2169 shadow Accept: 141    Submit: 421 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Pr ...

  5. FZU Problem 2169 shadow

    http://acm.fzu.edu.cn/problem.php?pid=2169 题目大意: S王国有N个城市,有N-1条道路.王都为编号1的城市.叛军驻扎在很多城市.除了王都外有K个城市有军队, ...

  6. FZU2169 shadow题解

    http://acm.fzu.edu.cn/problem.php?pid=2169 Problem Description YL 是shadow国的国王,shadow国有N个城市.为了节省开支,sh ...

  7. FZU 2165 v11(最小重复覆盖)+ codeforces 417D Cunning Gena

    告诉你若干个(<=100)武器的花费以及武器能消灭的怪物编号,问消灭所有怪物(<=100)的最小花费...当然每个武器可以无限次使用,不然这题就太水了╮(╯▽╰)╭ 这题当时比赛的时候连题 ...

  8. HDU 3016 线段树区间更新+spfa

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  9. In Action(SPFA+01背包)

    In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. php5.6 的curl开启和之前的不太一样了,搞了半天,记录下

    设置电脑环境变量中的->系统变量(注:不是用户变量) 新建 PHP_HOME 值 D:\php /PHP 根目录 Path 增加 ;%PHP_HOME%;%PHP_HOME%\ext       ...

  2. Mirror--程序访问镜像数据库的超时机制

    程序在访问有镜像的数据库和无镜像的数据库时,采用的链接超时时间算法不一样,因此会导致在在有镜像的数据库上设置了15 S的超时时间,而实际的超时时间仅为3.6 S,从而导致有镜像的数据库更容易超时. 在 ...

  3. [Axiom 3D]1.初识Axiom

    1. 简介 The Axiom 3D Rendering Engine is a fully object oriented 3D graphics engine using C# and the . ...

  4. 史上最全的MonkeyRunner自动化测试从入门到精通(3)

    原文地址https://blog.csdn.net/liu_jing_hui/article/details/60956088 MonkeyRunner复杂的功能开始学习 (1)获取APK文件中ID的 ...

  5. 自定义查询语句SpringData

    虽然官方的API中给我们提供了很多关键字的查询,但是还是不够灵活,因为我们在项目中,会遇见奇葩的业务,我们需要用SpringData中的一个@Query注解. 使用@Query自定义查询 这种查询可以 ...

  6. cas php

    CAS的php客户端实践—单点登录整合php程序 兄弟近日尝试将一个php程序以单点登录方式和原有的系统整合在一起.验证服务器选用的是CAS,其提供有相应的php客户端.整个过程如下:1.搭建CAS服 ...

  7. hdu5012 圆环相交面积

    题中给了 两个同心圆, 一个大圆一个小圆,然后再给了一个大圆一个小圆也是同心圆,求这两个圆环相交的面积,用两个大圆面积减去两倍大小圆面积交加上两个小圆面积交,就ok了 这里算是坑明白了 使用acos的 ...

  8. animation CSS3动画总结

    最近一个小游戏项目用到了CSS3的动画属性,例如transition.transform.animation.经过三个星期,终于做完了,利用周末好好梳理总结一下. keyframes这个属性用来定义一 ...

  9. 【运维技术】kafka三实例集群环境搭建及测试使用

    kafka三实例集群环境搭建及测试使用 单机搭建分为两部分:1. 软件安装启动 2. 软件配置 软件安装启动: # 切换到目录 cd /app # 获取kafka最新安装包,这边使用的是镜像地址,可以 ...

  10. java第六天

    p37 1.java ant详解 练习8 /** * Created by xkfx on 2017/2/26. */ class A { static int i = 47; } public cl ...