P1113 杂务

 

 

输入输出样例

输入 #1
7
1 5 0
2 2 1 0
3 3 2 0
4 6 1 0
5 1 2 4 0
6 8 2 4 0
7 4 3 5 6 0
输出 #1
23

思路
  由主次关系可想到拓扑排序,跑一遍拓扑排序得到一种线性的工作方式,维护每个任务点时间花费的最大值即可

CODE
  1 #include <bits/stdc++.h>
  2 #define dbg(x) cout << #x << "=" << x << endl
  3 #define eps 1e-8
  4 #define pi acos(-1.0)
  5 
  6 using namespace std;
  7 typedef long long LL;
  8 
  9 template<class T>inline void read(T &res)
 10 {
 11     char c;T flag=1;
 12     while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;res=c-'0';
 13     while((c=getchar())>='0'&&c<='9')res=res*10+c-'0';res*=flag;
 14 }
 15 
 16 namespace _buff {
 17     const size_t BUFF = 1 << 19;
 18     char ibuf[BUFF], *ib = ibuf, *ie = ibuf;
 19     char getc() {
 20         if (ib == ie) {
 21             ib = ibuf;
 22             ie = ibuf + fread(ibuf, 1, BUFF, stdin);
 23         }
 24         return ib == ie ? -1 : *ib++;
 25     }
 26 }
 27 
 28 int qread() {
 29     using namespace _buff;
 30     int ret = 0;
 31     bool pos = true;
 32     char c = getc();
 33     for (; (c < '0' || c > '9') && c != '-'; c = getc()) {
 34         assert(~c);
 35     }
 36     if (c == '-') {
 37         pos = false;
 38         c = getc();
 39     }
 40     for (; c >= '0' && c <= '9'; c = getc()) {
 41         ret = (ret << 3) + (ret << 1) + (c ^ 48);
 42     }
 43     return pos ? ret : -ret;
 44 }
 45 
 46 const int maxn = 1e5 + 7;
 47 
 48 int in[maxn], out[maxn];
 49 int val[maxn];
 50 int cost[maxn];
 51 int edge[maxn], head[maxn], nxt[maxn], cnt;
 52 int n, ans;
 53 
 54 void BuildGraph(int u, int v) {
 55     cnt++;
 56     edge[cnt] = v;
 57     nxt[cnt] = head[u];
 58     head[u] = cnt;
 59 }
 60 
 61 void topo() {
 62     queue <int> q;
 63     for ( int i = 1; i <= n; ++i ) {
 64         if(in[i] == 0) {
 65             q.push(i);
 66             cost[i] = val[i];
 67         }
 68     }
 69     while (!q.empty()) {
 70         int u = q.front();
 71         q.pop();
 72         for(int i = head[u]; i; i = nxt[i]) {
 73             int v = edge[i];
 74             cost[v] = max(cost[v], cost[u] + val[v]);
 75             --in[v];
 76             if(!in[v]) {
 77                 if(!out[v]) {
 78                     ans = max(ans, cost[v]);
 79                 }
 80                 else {
 81                     q.push(v);
 82                 }
 83             }
 84         }
 85     }
 86     
 87 }
 88 int main()
 89 {
 90     read(n);
 91     for ( int i = 1; i <= n; ++i ) {
 92         int id = 0, c = 0;
 93         scanf("%d %d",&id, &c);
 94         val[id] = c;
 95         int x;
 96         while(scanf("%d",&x) && x) {
 97             BuildGraph(id, x);
 98             out[id]++;
 99             in[x]++;
100         }
101     }
102     topo();
103     printf("%d\n",ans);
104     return 0;
105 }
View Code

 

全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
勤奋努力的椰子这就开摆:美团骑手在美团工作没毛病
投递美团等公司10个岗位
点赞 评论 收藏
分享
最近又搬回宿舍了,在工位坐不住,写一写秋招起伏不断的心态变化,也算对自己心态的一些思考表演式学习从开始为实习准备的时候就特别焦虑,楼主一开始选择的是cpp后端,但是24届这个方向已经炸了,同时自己又因为本科非92且非科班,所以感到机会更加迷茫。在某天晚上用java写出hello&nbsp;world并失眠一整晚后选择老本行干嵌入式。理想是美好的,现实情况是每天忙但又没有实质性进展,总是在配环境,调工具,顺带还要推科研。而这时候才发现自己一直在表演式学习,徘徊在设想如何展开工作的循环里,导致没有实质性进展。现在看来当时如果把精力专注在动手写而不是两只手端着看教程,基本功或许不会那么差。实习的焦虑5月,楼主...
耶比:哲学上有一个问题,玛丽的房间:玛丽知道眼睛识别色彩的原理知道各种颜色,但是她生活在黑白的房间里,直到有一天玛丽的房门打开了她亲眼看到了颜色,才知道什么是色彩。我现在最大可能的减少对非工作事情的思考,如果有一件事困扰了我, 能解决的我就直接做(去哪里或者和谁吵架等等……),解决不了的我就不想了,每一天都是最年轻的一天,珍惜今天吧
投递比亚迪等公司10个岗位 > 秋招被确诊为…… 牛客创作赏金赛
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务