FZU 2169 shadow(最短路)
2014-05-02 23:54
375 查看
题目链接:FZU 2169 shadow
比较简单的最短路,SPFA搞定,白书上的dijkstra模版一直是编译错误,不知道怎么搞的。
比较简单的最短路,SPFA搞定,白书上的dijkstra模版一直是编译错误,不知道怎么搞的。
#include <iostream> #include <queue> #include <cstdio> #include <cstring> using namespace std; const int MAX_N = 100000 + 10; const int INF = 0x3f3f3f3f; struct Edge { int v, next; }; int cnt, n, k, res, _count; Edge e[MAX_N << 1]; int num[MAX_N], vis[MAX_N], head[MAX_N], d[MAX_N], has_army[MAX_N]; queue <int> Q; void addEdge(int u, int v) { e[cnt].v = v; e[cnt].next = head[u]; head[u] = cnt; cnt++; } void SPFA(int src) { int u, v; memset(vis, 0, sizeof(vis)); memset(d, INF, sizeof(d)); d[src] = 0; queue<int> Q; Q.push(src); while(!Q.empty()) { u = Q.front(); Q.pop(); vis[u] = false; for(int i = head[u]; i != -1; i = e[i].next) { v = e[i].v; if(d[v] > d[u] + 1) { d[v] = d[u] + 1; if(!vis[v]) { Q.push(v); vis[v] = true; } } } } } int main() { while(scanf("%d%d", &n, &k)!= EOF) { cnt = res = _count = 0; for(int i = 1; i <= n; i++) { scanf("%d", &num[i]); if(num[i]) _count++; } memset(head, -1, sizeof(head)); for(int i = 0; i < k; i++) scanf("%d", &has_army[i]); int u, v; for(int i = 0; i < n - 1; i++) { scanf("%d%d", &u, &v); addEdge(u, v); addEdge(v, u); } for(int i = 0; i < k; i++) { SPFA(has_army[i]); for(int j = 1; j <= n; j++) { if(!num[j]) continue; if(d[j] != INF) { res += num[j]; num[j] = 0; _count--; if(_count == 0) break; } } if(_count == 0) break; } printf("%d\n", res); } return 0; }
相关文章推荐
- 设计模式学习总结(23) 中介者模式
- SpringMVC中JSP取不到ModelAndView的数据的原因
- 我常用的linux命令大全------知识和经验在于积累和总结
- paip. 混合编程的实现resin4 (自带Quercus ) 配置 php 环境
- 方差与协方差矩阵
- paip. 混合编程的实现resin4 (自带Quercus ) 配置 php 环境
- JAVA网络编程--UDP通信
- oracle数据库的字符集
- 网站的截图
- ubuntu10.10整合mysql,qt
- ExtJs的Hello World
- UVa 11624 Fire!(多源BFS)
- paip.java UrlRewrite 的原理and实现 htaccess正则表达式转换
- CentOS6.4之图解SSH无验证双向登陆配置
- paip.java UrlRewrite 的原理and实现 htaccess正则表达式转换
- 一个极其简洁的Python网页抓取程序,自动从雅虎财经抓取股票数据
- ListView居中
- 代理模式解读
- android数据存储_SQL数据库
- paip.操作符重载的缺失 Java 的一个大缺点