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

 

全部评论

相关推荐

面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗&nbsp;&nbsp;他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了&nbsp;&nbsp;好好准备,等待明天的影石360和周四的腾讯了&nbsp;&nbsp;加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
SaviorSu:直接说下学期可以请假,一般情况学校允许我26届,大三就直接去实习了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务