HDU 4109 Instrction Arrangement

题目链接:https://vjudge.net/problem/HDU-4109

题目大意

有 N 个指令,标号从 0 ~ N - 1,和 M 个指令间的先后关系,每个关系都有一个权值 w,表示后一个指令在前一个指令开始时间之后 w 纳秒才开始执行。现在要并发执行这些指令,问最少要多长时间才能执行完?

分析

关键路径模板题,有多个源点和汇点,答案为所有汇点的最早开始时间的最大值。

代码如下

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3  
  4 #define INIT() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
  5 #define Rep(i,n) for (int i = 0; i < (n); ++i)
  6 #define For(i,s,t) for (int i = (s); i <= (t); ++i)
  7 #define rFor(i,t,s) for (int i = (t); i >= (s); --i)
  8 #define ForLL(i, s, t) for (LL i = LL(s); i <= LL(t); ++i)
  9 #define rForLL(i, t, s) for (LL i = LL(t); i >= LL(s); --i)
 10 #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
 11 #define rforeach(i,c) for (__typeof(c.rbegin()) i = c.rbegin(); i != c.rend(); ++i)
 12  
 13 #define pr(x) cout << #x << " = " << x << "  "
 14 #define prln(x) cout << #x << " = " << x << endl
 15  
 16 #define LOWBIT(x) ((x)&(-x))
 17  
 18 #define ALL(x) x.begin(),x.end()
 19 #define INS(x) inserter(x,x.begin())
 20 #define UNIQUE(x) x.erase(unique(x.begin(), x.end()), x.end())
 21 #define REMOVE(x, c) x.erase(remove(x.begin(), x.end(), c), x.end()); // 删去 x 中所有 c 
 22 #define TOLOWER(x) transform(x.begin(), x.end(), x.begin(),::tolower);
 23 #define TOUPPER(x) transform(x.begin(), x.end(), x.begin(),::toupper);
 24  
 25 #define ms0(a) memset(a,0,sizeof(a))
 26 #define msI(a) memset(a,0x7f,sizeof(a))
 27 #define msM(a) memset(a,-1,sizeof(a))
 28 
 29 #define MP make_pair
 30 #define PB push_back
 31 #define ft first
 32 #define sd second
 33  
 34 template<typename T1, typename T2>
 35 istream &operator>>(istream &in, pair<T1, T2> &p) {
 36     in >> p.first >> p.second;
 37     return in;
 38 }
 39  
 40 template<typename T>
 41 istream &operator>>(istream &in, vector<T> &v) {
 42     for (auto &x: v)
 43         in >> x;
 44     return in;
 45 }
 46 
 47 template<typename T>
 48 ostream &operator<<(ostream &out, vector<T> &v) {
 49     Rep(i, v.size()) out << v[i] << " \n"[i == v.size()];
 50     return out;
 51 }
 52  
 53 template<typename T1, typename T2>
 54 ostream &operator<<(ostream &out, const std::pair<T1, T2> &p) {
 55     out << "[" << p.first << ", " << p.second << "]" << "\n";
 56     return out;
 57 }
 58 
 59 inline int gc(){
 60     static const int BUF = 1e7;
 61     static char buf[BUF], *bg = buf + BUF, *ed = bg;
 62     
 63     if(bg == ed) fread(bg = buf, 1, BUF, stdin);
 64     return *bg++;
 65 } 
 66 
 67 inline int ri(){
 68     int x = 0, f = 1, c = gc();
 69     for(; c<48||c>57; f = c=='-'?-1:f, c=gc());
 70     for(; c>47&&c<58; x = x*10 + c - 48, c=gc());
 71     return x*f;
 72 }
 73 
 74 template<class T>
 75 inline string toString(T x) {
 76     ostringstream sout;
 77     sout << x;
 78     return sout.str();
 79 }
 80 
 81 inline int toInt(string s) {
 82     int v;
 83     istringstream sin(s);
 84     sin >> v;
 85     return v;
 86 }
 87 
 88 //min <= aim <= max
 89 template<typename T>
 90 inline bool BETWEEN(const T aim, const T min, const T max) {
 91     return min <= aim && aim <= max;
 92 }
 93  
 94 typedef long long LL;
 95 typedef unsigned long long uLL;
 96 typedef vector< int > VI;
 97 typedef vector< bool > VB;
 98 typedef vector< char > VC;
 99 typedef vector< double > VD;
100 typedef vector< string > VS;
101 typedef vector< LL > VL;
102 typedef vector< VI > VVI;
103 typedef vector< VB > VVB;
104 typedef vector< VS > VVS;
105 typedef vector< VL > VVL;
106 typedef vector< VVI > VVVI;
107 typedef vector< VVL > VVVL;
108 typedef pair< int, int > PII;
109 typedef pair< LL, LL > PLL;
110 typedef pair< int, string > PIS;
111 typedef pair< string, int > PSI;
112 typedef pair< string, string > PSS;
113 typedef pair< double, double > PDD;
114 typedef vector< PII > VPII;
115 typedef vector< PLL > VPLL;
116 typedef vector< VPII > VVPII;
117 typedef vector< VPLL > VVPLL;
118 typedef vector< VS > VVS;
119 typedef map< int, int > MII;
120 typedef unordered_map< int, int > uMII;
121 typedef map< LL, LL > MLL;
122 typedef map< string, int > MSI;
123 typedef map< int, string > MIS;
124 typedef set< int > SI;
125 typedef stack< int > SKI;
126 typedef queue< int > QI;
127 typedef priority_queue< int > PQIMax;
128 typedef priority_queue< int, VI, greater< int > > PQIMin;
129 const double EPS = 1e-8;
130 const LL inf = 0x7fffffff;
131 const LL infLL = 0x7fffffffffffffffLL;
132 const LL mod = 1e9 + 7;
133 const int maxN = 1e3 + 7;
134 const LL ONE = 1;
135 const LL evenBits = 0xaaaaaaaaaaaaaaaa;
136 const LL oddBits = 0x5555555555555555;
137 
138 struct Edge{
139     int from, to, w;
140     int et, lt;
141 };
142 
143 istream& operator>> (istream& in, Edge &x) {
144     in >> x.from >> x.to >> x.w;
145     return in;
146 }
147 
148 struct Vertex{
149     int in, out, value;
150     VI next, prev;
151     int et, lt;
152     
153     void clear() {
154         value = in = out = 0;
155         next.clear();
156         prev.clear();
157         et = 0;
158         lt = inf;
159     }
160 };
161 
162 int N, M, ans;
163 Vertex V[maxN];
164 vector< Edge > E;
165 VI topo;
166 
167 void addEdge(Edge &x) {
168     V[x.from].next.PB(E.size());
169     V[x.to].prev.PB(E.size());
170     ++V[x.to].in;
171     ++V[x.from].out;
172     E.PB(x);
173 }
174 
175 void init() {
176     For(i, 1, N) V[i].clear();
177     E.clear();
178     topo.clear();
179     ans = 0;
180 }
181 
182 void TopoSort() {
183     SKI sk;
184     For(i, 1, N) if(!V[i].in) sk.push(i);
185     
186     while(!sk.empty()) {
187         int tmp = sk.top(); sk.pop();
188         
189         topo.PB(tmp);
190         Rep(i, V[tmp].next.size()) {
191             Edge &e = E[V[tmp].next[i]];
192             if(!--V[e.to].in) sk.push(e.to);
193             V[e.to].et = max(V[e.to].et, V[e.from].et + e.w); // 在拓扑排序的同时计算每个节点的最早发生时间 
194         }
195     }
196 }
197 
198 int main(){
199     //freopen("MyOutput.txt","w",stdout);
200     //freopen("input.txt","r",stdin);
201     INIT();
202     while(cin >> N >> M) {
203         init();
204         Rep(i, M) {
205             Edge t;
206             cin >> t;
207             ++t.from;
208             ++t.to;
209             addEdge(t);
210         }
211         TopoSort();
212         For(i, 1, N) if(!V[i].out) ans = max(ans, V[i].et);
213         cout << ans + 1 << endl;
214     }
215     return 0;
216 }
View Code

 

转载于:https://www.cnblogs.com/zaq19970105/p/11319841.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

养成一个习惯需要多久?

有人说养成一个习惯需要21天&#xff0c;有人说30天……养成习惯到底需要多少天&#xff1f; _hzw 2012-11-09 18:04又快到年末了。 年初时&#xff0c;你曾许诺要养成一些好习惯&#xff0c;比如要常运动、多读书、少微博。有人说说养成一个习惯只需要坚持21天&#xff1b;21天…

vue3 eslint The template root requires exactly one element问题

vue项目中手动引入eslint npm install eslint --save-dev eslint初始化 npx eslint --init 运行时npm run lint 简单语法问题--fix会自动修复 但是vue3项目出现只能有一个根节点的问题 原因在于 eslintrc.js里extends中plugin:vue/essential的问题 看eslint-plugin-vue官网…

你所知道的学习方法,都是错的!

你所知道的学习方法&#xff0c;都是错的&#xff01; 上课的时候记笔记&#xff1f;哪门功课不行&#xff0c;就集中精力专项突击&#xff1f;自习的时候不要晃&#xff0c;选好一个地儿安安稳稳地待那儿学习&#xff1f;你还在这样学习吗&#xff1f;不要被骗了&#xff1a;这…

Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲

Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台: 微服务是当前非常流行的技术框架&#xff0c;通过服务的小型化、原子化以及分布式架构的弹性伸缩和高可用性&#xff0c;可以实现业务之间的松耦合、业务的灵活调整组合以及系统的高可用性…

亚伦•斯沃茨:提升时间的品质

亚伦•斯沃茨&#xff1a;提升时间的品质 不休不眠地工作是低效的&#xff0c;怎样发挥时间的最大效率&#xff1f; 伏维阁主 2013-01-18 16:45图片来源&#xff1a;personalitytutor.com &#xff08;亚伦•斯沃茨Aaron Swartz / 文&#xff09;《 怎样有效利用时间 》中给出的…

Flex4_HttpService组件

1、在JavaWeb项目中新建Servlet(FlexLoginServelt) &#xff1a; public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");response.setContentType("text…

想要提高记忆力?做梦去吧!

想要提高记忆力&#xff1f;做梦去吧&#xff01; 豆豆助 2010-11-26 11:47经验说&#xff1a;不好好学习&#xff0c;就知道睡觉 实验说&#xff1a;要想记忆好&#xff0c;睡觉不能少。做梦可以增强我们的记忆。 有没有办法能让人不费吹灰之力增强记忆力&#xff1f; 做梦吧你…

This beta version of Typora is expired, please download and install a newer version. 解决方案

原文链接&#xff1a;https://blog.csdn.net/yyywxk/article/details/125133205 问题描述 今日打开 Typora 软件时&#xff0c;突然报错&#xff0c;提示软件版本已过期&#xff0c;需要安装新版本&#xff0c;如下图所示。 关闭错误提示框后会自动跳转到&#xff1a;https://…

真想学习?扔掉你详细的计划吧!

真想学习&#xff1f;扔掉你详细的计划吧&#xff01; 该不该定个计划&#xff1f;详细的计划确实可以更高效&#xff0c;也许可以将你减肥的速度加快一倍。但是如果想学习&#xff0c;还是扔掉详细的计划吧&#xff01;因为它会占用你太多的认知资源&#xff0c;只顾着闷头做事…

React Icons

发现一个Icon库,分享下哈; 使用React-Icons轻松地在React项目中包含流行图标&#xff0c;它利用es6导入&#xff0c;允许只包含项目正在使用的图标。 Installation (for standard modern project) npm install react-icons --save Usage import { FaBeer } from react-ico…

那些你可能还不知道的新发明

The Wello WaterWheel 对世界上六分之一的人来说&#xff0c;取水是个苦活&#xff1a;步行数小时&#xff0c;排队等待&#xff0c;负重运送。 而花费在这个基本需求上的时间让许多儿童不得不辍学&#xff0c;让女人不能负起责任来处理家务或者工作以取得收入。在很多欠发达地…

AntD中Form的input正则校验:不能输入空格

什么是正则表达式&#xff1f; 在编写处理字符串的程序或网页时&#xff0c;经常有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说&#xff0c;正则表达式就是记录文本规则的代码。 正则test() 方法 定义和用法 test() 方法用于检测一…

react之react-spring动效库

react-spring具有基于钩子和基于组件的API&#xff0c;这里将专门针对所有动画使用具有基本状态的钩子. framer-motion也很好用,但是体积2M多,太大了劝退 react-spring才6KB. react-spring npm搜索 老官网react-spring 官网Getting started | React Spring 做了个横向遍…

Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析

Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知&#xff0c;标准的搜索引擎主要分成三个大的部分&#xff0c;第一步是爬虫系统&#xff0c;第二步是数据分析&#xff0c;第三步才是检索结果。首先&#xff0c;电商的搜…

答应我不要问TCP三次握手四次挥手

衍生头疼问题如下。 请画出三次握手和四次挥手的示意图为什么连接的时候是三次握手&#xff1f;什么是半连接队列&#xff1f;ISN(Initial Sequence Number)是固定的吗&#xff1f;三次握手过程中可以携带数据吗&#xff1f;如果第三次握手丢失了&#xff0c;客户端服务端会如…

深度学习鼻祖杰夫·辛顿及巨头们的人才抢夺战

摘要&#xff1a;深度学习已经诞生了数十年时间&#xff0c;但直到近几年才受到各大科技公司的重视&#xff0c;被认为是硅谷科技企业的未来&#xff0c;今天为大家介绍的是深度学习的开山鼻祖Geoffrey Hinton。在过去的三十年&#xff0c;深度学习运动一度被认为是学术界的一个…

EM算法(Expectation Maximization Algorithm)

文章目录 1. 前言 2.基础数学知识2.1.凸函数2.2.Jensen不等式 3.EM算法所解决问题的例子 4.EM算法4.1.模型说明 4.2.EM算法推导 4.3.EM算法收敛性证明 4.4. EM算法E步说明 5.小结 6.主要参考文献1. 前言 这是本人写的第一篇博客(2013年4月5日发在cnblogs上,现在迁移过来)&#…

ファイルアップロード関連のjQueryプラグイン10攻略

ファイルアップロード関連のjQueryプラグイン&#xff11;&#xff10;ファイルアップロードといってもSWFを使ったりAJAXを使ったりと方法が色々あって、いろんなやり方ができるjQueryプラグインです。望みの挙動に近いものを選んでカスタマイズすれば作りたいものが最速で作れ…

HTTP报文(转)

HTTP报文http://www.cnblogs.com/kissdodog/archive/2013/04/01/2993228.html之前写过一篇HTML报文&#xff0c;但是感觉写完之后还是不懂&#xff0c;最近终于有时间开始看《HTTP权威指南》&#xff0c;看完之后觉得还是比之前的理解更加深入了&#xff0c;提取HTTP报文出来做…

C#基础-应用程序域

文章导读同一台计算上的应用程序是通过进程来隔离的&#xff0c;每个应用程序都是加载到不同的进程中&#xff0c;从而达到应用程序的互不影响。操作系统【OS】通过进程控制块【PCB】感知进程的存在&#xff0c;分析【PCB】的数据结构可以发现&#xff0c;【PCB】维护进程运行的…