当前位置: 首页 > news >正文

天元建设集团有限公司信息湖南网站建设推广优化

天元建设集团有限公司信息,湖南网站建设推广优化,b2b商城网站系统,学术会议网站建设题意 给出一个包含n个bug的应用程序,以及m个补丁,每个补丁使用两个字符串表示,第一个串表示补丁针对bug的情况,即哪些bug存在,以及哪些bug不存在,第二个串表示补丁对bug的修复情况,即修复了哪些…

题意

给出一个包含n个bug的应用程序,以及m个补丁,每个补丁使用两个字符串表示,第一个串表示补丁针对bug的情况,即哪些bug存在,以及哪些bug不存在,第二个串表示补丁对bug的修复情况,即修复了哪些bug,以及引入哪些bug。补丁还包含修复的时间。问修复这些bug所需要的最短时间

思路

使用Dijkstra算法,使用n表示bug数,bug数限制在20内,初始n个bug全存在,即源点为1<<n-1,在从优先级队列中取出最短时间节点时,遍历补丁,根据当前补丁的情况以及修复情况来展开新的节点,同时将新节点放入优先级队列中,最后看目标点为0时的距离

代码

#include <bits/stdc++.h>using namespace std;#define _for(i, a, b) for(int i = (a); i < (b); i++)
#define _rep(i, a, b) for (int i = (a); i <= (b); i++)struct Edge
{int from, to, dist;
};struct HeapNode
{int u, d;bool operator<(const HeapNode& other) const{return d > other.d;}
};struct Patch
{int present, absent, introduce, remove, time;bool canApply(int u) const{return (u & present) == present && (absent & u) == 0;}int apply(int u) const{return (u | introduce) & (~remove);}
};template <size_t SZV, int INF>
struct Dijkstra
{int n;vector<Patch> patches;bool done[SZV];int d[SZV];void init(int n){this-> n = (1 << n);patches.clear();}void dijkstra(int s){priority_queue<HeapNode> pq;fill_n(done, n, false);fill_n(d, n, INF);d[s] = 0;pq.push({s, 0});while (!pq.empty()) {HeapNode curNode = pq.top();pq.pop();int u = curNode.u;if (done[u]) {continue;}done[u] = true;_for(i, 0, patches.size()) {const Patch& p = patches[i];if (!p.canApply(u)) {continue;}int v = p.apply(u);if (d[v] > d[u] + p.time) {d[v] = d[u] + p.time;pq.push({v, d[v]});}}}}
};void fastio()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
}const int MAXN = 20;
const int MAXV = (1 << MAXN) + 4;
const int INF = 1e9;int n, m;void toInt(const string& s, int& i1, int& i2)
{i1 = i2 = 0;_for(i, 0, n) {if (s[i] == '+') {i1 |= (1 << i);}if (s[i] == '-') {i2 |= (1 << i);}}
}Dijkstra<MAXV, INF> solver;int main()
{fastio();#ifndef ONLINE_JUDGEifstream fin("f:\\OJ\\uva_in.txt");streambuf* back = cin.rdbuf(fin.rdbuf());#endifint kase = 1;while (cin >> n >> m) {if (n == 0 && m == 0) {break;}//cout << "n:" << n << " m:" << m << endl;solver.init(n);string buf1, buf2;Patch patch;_for(i, 0, m) {cin >> patch.time >> buf1 >> buf2;toInt(buf1, patch.present, patch.absent);toInt(buf2, patch.introduce, patch.remove);solver.patches.push_back(patch);}/*for (int i = 0; i < solver.patches.size(); i++) {const Patch& patch = solver.patches[i];cout << patch.present << " " << patch.absent << " " << patch.introduce << " " << patch.remove << endl;}*/solver.dijkstra(solver.n - 1);cout << "Product " << kase++ << endl;if (solver.d[0] == INF) {cout << "Bugs cannot be fixed." << endl;} else {cout << "Fastest sequence takes " << solver.d[0] << " seconds." << endl;}cout << endl;}#ifndef ONLINE_JUDGEcin.rdbuf(back);#endifreturn 0;
}

注意

因为在代码中初始节点数为1<<20-1,如果直接在栈上即main函数中创建Dijkstra类,由于栈空间限制,会出错,所以需要设置为全局变量

http://www.khdw.cn/news/44626.html

相关文章:

  • wap手机网站建设制作开发企业推广方法
  • 专业手机网站建设设计南宁seo推广优化
  • 网站分析欣赏如何做免费网络推广
  • 个人网站备案可以做项目网站小红书关键词排名怎么做
  • 北京哪里做网站计算机培训机构排名
  • 帝国网站怎么仿站西安seo网站建设
  • 一个备案可以做几个网站吗跟我学seo
  • 购物网站功能介绍seo推广的全称是
  • 创意网站建设公司百度关键词投放
  • 优酷的网站头怎么做的怎样在百度上发布自己的文章
  • 西安做网站的公司哪家好如何创建个人网页
  • 专做毕业设计的网站搜索引擎网址有哪些
  • 视频网站开发费用巩义网络推广
  • 西安网站维护最近一周的重大新闻
  • 水利建设公共服务平台网站sem搜索
  • 重庆江津网站建设app注册接单平台
  • 邯郸专业做网站哪里有微信crm
  • 外贸公司网站开发做营销型网站的公司
  • 云建站微网站杭州网站优化体验
  • 唯品会一家专门做特卖的网站手机版怎么去做推广
  • 漳州网站优化外贸网站制作公司
  • 手机网站建设方法网站快速收录的方法
  • 济南网站优化推广公司营销的概念是什么
  • 专业做互联网招聘的网站百度网首页
  • 谷歌怎么做网站推广成都关键词快速排名
  • 自己做网站流程关键字挖掘机爱站网
  • 如何在网站做旅游产品cnzz站长统计工具
  • 泰安做网站建设的公司哪家好小红书搜索关键词排名
  • 网站建设技术思维导图网站搜索引擎优化的步骤
  • 济南建站公司模板北京百度推广官网首页