FZU 2169 shadow spfa
题目链接: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的更多相关文章
- FZU 2169 shadow (用了一次邻接表存边,树形DP)
Accept: 28 Submit: 97 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description YL是shadow国的国 ...
- 2014 Super Training #10 C Shadow --SPFA/随便搞/DFS
原题: FZU 2169 http://acm.fzu.edu.cn/problem.php?pid=2169 这题貌似有两种解法,DFS和SPFA,但是DFS怎么都RE,SPFA也要用邻接表表示边, ...
- 福州大学 Problem 2169 shadow
http://acm.fzu.edu.cn/problem.php?pid=2169 思路:建立一个邻接表,利用搜索中回溯把走过的路标记为1,然后把这些标记为1的值全部加起来. Problem 216 ...
- Problem 2169 shadow
Problem 2169 shadow Accept: 141 Submit: 421 Time Limit: 1000 mSec Memory Limit : 32768 KB Pr ...
- FZU Problem 2169 shadow
http://acm.fzu.edu.cn/problem.php?pid=2169 题目大意: S王国有N个城市,有N-1条道路.王都为编号1的城市.叛军驻扎在很多城市.除了王都外有K个城市有军队, ...
- FZU2169 shadow题解
http://acm.fzu.edu.cn/problem.php?pid=2169 Problem Description YL 是shadow国的国王,shadow国有N个城市.为了节省开支,sh ...
- FZU 2165 v11(最小重复覆盖)+ codeforces 417D Cunning Gena
告诉你若干个(<=100)武器的花费以及武器能消灭的怪物编号,问消灭所有怪物(<=100)的最小花费...当然每个武器可以无限次使用,不然这题就太水了╮(╯▽╰)╭ 这题当时比赛的时候连题 ...
- HDU 3016 线段树区间更新+spfa
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- In Action(SPFA+01背包)
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
随机推荐
- K-均值聚类(K-means)算法
https://www.cnblogs.com/ybjourney/p/4714870.html 最近在看<机器学习实战>这本书,因为自己本身很想深入的了解机器学习算法,加之想学pytho ...
- C#+GDAL读取影像(1)
环境:VS2010,C#,GDAL1.7 读取影像: using System; using System.Collections.Generic; using System.ComponentMod ...
- KS检验学习[转载]
转自:https://wenku.baidu.com/view/ccfa573a3968011ca30091d6.html https://www.cnblogs.com/arkenstone/p/5 ...
- 深入理解Nginx
nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...
- python16_day27【crm 内嵌、删除、action】
一.内嵌 二.删除及关联关联显示 三.action
- java之类适配器
类适配器 所谓类适配器,指的是适配器Adapter继承我们的被适配者Adaptee,并实现目标接口Target.由于Java中是单继承,所以这个适配器仅仅只能服务于所继承的被适配者Adaptee.代码 ...
- rails 数据验证
validates :money, :presence => true, :numericality => {:only_integer => true}
- nodejs+express工程 在npm install之后或使用npm install bootstrap命令安装bootstrap之后
nodejs+express工程 在npm install之后或使用npm install bootstrap命令安装bootstrap之后引入bootstrap文件 如果你的静态资源存放在多个目录下 ...
- centos6.5搭建svn
检查已经安装版本 rpm -qa subversion如果存在旧版本,卸载yum remove subversion 安装svn yum install subversion 验证是否安装成功 sv ...
- CSS3 页面中展示邮箱列表点击弹出发送邮件界面
CSS3 页面中展示邮箱列表点击弹出发送邮件界面 代码: <!DOCTYPE html> <html> <head> <meta charset=" ...