uva 658 It's not a Bug, it's a Feature! 最短路
2015-09-14 21:09
323 查看
题意:有一个软件有n个漏洞m个补丁,每种补丁都有一个修复时间,问你最短的修复时间修复完所有漏洞。
思路:很简单的最短路 建好图后直接套模板就好(凑个水题。。。)
思路:很简单的最短路 建好图后直接套模板就好(凑个水题。。。)
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <queue> using namespace std; const int maxn = (1 << 20) + 10; const int N = 25; const int INF = 0x3f3f3f3f; struct Edge{ int u, d; Edge(int u = 0, int d = 0) : u(u), d(d) {} bool operator < (const Edge &rhs) const{ return d > rhs.d; } }; int n, m, t; int bi , pow_ ; int visit[maxn], dist[maxn]; char bug , new_bug ; vector<pair<int, int> > G[maxn]; void init(){ pow_[0] = 1; for(int i = 1; i <= 21; i++) pow_[i] = pow_[i-1] * 2; } void build_path(int cur){ if(cur == n){ int u = 0, v = 0; for(int i = n - 1; i >= 0; i--){ u += bi[i] * pow_[n-1-i]; if(new_bug[i] == '+') v += pow_[n-1-i]; else if(new_bug[i] == '0') v += bi[i] * pow_[n-1-i]; } G[u].push_back(make_pair(v, t)); //printf("%d to %d va %d\n", u, v, t); return; } if(bug[cur] == '-'){ bi[cur] = 0; build_path(cur + 1); return; } if(bug[cur] == '+'){ bi[cur] = 1; build_path(cur + 1); return; } bi[cur] = 0; build_path(cur + 1); bi[cur] = 1; build_path(cur + 1); } int dijkstra(){ memset(visit, 0, sizeof(visit)); memset(dist, INF, sizeof(dist)); int s = (1 << n) - 1, t = 0; priority_queue<Edge> Q; Q.push(Edge(s, 0)); dist[s] = 0; while(!Q.empty()){ Edge cur = Q.top(); Q.pop(); int u = cur.u; if(visit[u]) continue; visit[u] = 1; for(int i = 0; i < (int)G[u].size(); i++){ int v = G[u][i].first; int d = G[u][i].second; if(dist[v] > dist[u] + d){ dist[v] = dist[u] + d; Q.push(Edge(v, dist[v])); } } } return dist[t]; } int cas = 0; void solve(){ for(int i = 0; i < (1 << n); i++) G[i].clear(); for(int i = 0; i < m; i++){ scanf("%d%s%s", &t, bug, new_bug); build_path(0); } int ans = dijkstra(); printf("Product %d\n", ++cas); if(ans == INF) printf("Bugs cannot be fixed.\n\n"); else printf("Fastest sequence takes %d seconds.\n\n", ans); } int main() { init(); while(scanf("%d%d", &n, &m) && n) solve(); return 0; }
相关文章推荐
- hdu 1528 Perfection(数论·因子和·C++·java)
- jQuery提交数据给php,serialize()方法提交所有数据,不发生页面跳转
- 一个资深iOS开发者对于React Native的看法
- JavaScript嵌套函数this的重定向
- 手机新闻网站,手持移动新闻,手机报client,jQuery Mobile手机新闻网站,手机新闻网站demo,新闻阅读器开发
- 根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
- HTML 属性
- backBone.js初识
- bootstrap使用汇总
- jQuery视差滚动插件,(附原理分析,调用方法)
- html轮播效果的实现
- JS 正则常用验证
- JSON数据提取的基本方法-2015年9月14日
- JavaScript获取iframe的内容
- 剑指offer在线编程题汇总与讲解(part 1)
- angular学习日志02
- 前端优化
- js匿名函数
- jsoncpp简单示例
- 解析JSON格式数据