ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P1113 杂务

2020-02-20 14:00:28  阅读:215  来源: 互联网

标签:P1113 杂务 res getc while flag && getchar


 

 

输入输出样例

输入 #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

 


标签:P1113,杂务,res,getc,while,flag,&&,getchar
来源: https://www.cnblogs.com/orangeko/p/12335461.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有