[水题日常]Luogu1113 杂务

这几天又在颓.

我的blog难度目前还比较低,主要面向像我这样子的新手(当然内容也会尽量讲得具体清楚一些)x

如果有错误还请指出~



写完随笔之后才去翻了一下这题题解之后才注意到这题是有序的

QAQ完全不用像我这么麻烦啊x



题目链接<<

题目大意:

  • 有n个杂务,完成每个杂务都需要一个时间,并且有的杂务需要在准备工作(就是其他的一些杂务)完成之后才能进行,求完成所有杂务的时间.
  • 互相没有关系的杂务可以同时进行.
  • n<=1e5,每个杂务的准备工作不超过100个.


噫这应该算是经典题?(然而我今天才做x

一开始没看到准备工作不超过一百个…(emm空间开不起啊咋办?

然后又去看了一眼题面x日常石乐志

  • 好的我们把每个杂务看成一个有权值的点.
  • 杂务需要准备工作那就向准备工作连一条有向边.
  • 然后应该是求dag最长路?
  • 怎么求最长路啊?
  • 我也不会求啊.
  • 直接考虑求到每个点的最长路.
  • 读入的时候直接判一个杂务有没有准备工作,没有的话直接打上标记,到这个点的最长路就是这个点的权值.
  • 遍历每个点没有标记的话就记忆化dfs(跟dp差不多?
  • 这么做应该可以(反正我过了=w=

贴代码x

#include<cstdio>
const int N=10005;
const int M=1000005;
struct edge{int to,next;}edges[M];
int head[N],cnt;
int n,len,ans;
int dp[N],w[N];
bool mark[N];
inline int read()
{
    int s=0;char c;while((c=getchar())<‘0‘||c>‘9‘);
    do{s=s*10+c-‘0‘;}while((c=getchar())>=‘0‘&&c<=‘9‘);return s;
}
inline int max(int x,int y){return x>y?x:y;}
inline void addEdge(int u,int v)
{
    edges[++cnt]=(edge){v,head[u]};
    head[u]=cnt;
}
inline int dfs(int x)
{
    if(mark[x])return dp[x];
    int temp=0;
    for(int i=head[x];i;i=edges[i].next)
    {
        temp=max(temp,dfs(edges[i].to));
    }mark[x]=1;
    return (dp[x]=temp+dp[x]);
}
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
    {
        int key,val,temp,tot=0;
        key=read();val=read();dp[key]=val;
        while(temp=read())
        {
            addEdge(key,temp);
            tot++;
        }
        if(tot==0)mark[key]=1;
    }
    for(int i=1;i<=n;i++)if(!mark[i])dfs(i);
    for(int i=1;i<=n;i++)ans=max(ans,dp[i]);
    printf("%d",ans);
    return 0;
}

View Magical Code~

时间: 2024-11-08 03:58:47

[水题日常]Luogu1113 杂务的相关文章

codevs 1487 大批整数排序(水题日常)

时间限制: 3 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description !!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算机制发生变化 计算内存的时候会包括栈空间 swap空间 这题的2M是单指内存空间... 十分十分抱歉 抱歉 !!! 现在有一大批(总数不超过10000000个)1到10之间的整数,现在请你从小到大进行排序输出. (测试数据将超过11MB.) 输入描述 Input Description 第一行表示将下排序

codevs 1683 车厢重组(水题日常)

时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题目描述 Description 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序.于是他就负责用这座桥将进站的车厢按车厢号从小到大排列.他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序. 输入描

洛谷 P1216 [USACO1.5]数字三角形 Number Triangles(水题日常)

题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大 输入输出格式 输入格式: 第一个行包含 R(1<= R<=1000) ,表示行的数目. 后面每行为这个数字金字塔特定行包含的整数. 所有的被供应的整数是非负的且不大于100. 输出格式: 单独的一行,包含那个可能

洛谷 P1910 L国的战斗之间谍(水题日常)

题目背景 L国即将与I国发动战争!! 题目描述 俗话说的好:“知己知彼,百战不殆”.L国的指挥官想派出间谍前往I国,于是,选人工作就落到了你身上. 你现在有N个人选,每个人都有这样一些数据:A(能得到多少资料).B(伪装能力有多差).C(要多少工资).已知敌人的探查间谍能力为M(即去的所有人B的和要小于等于M)和手头有X元钱,请问能拿到多少资料? 输入输出格式 输入格式: N M X A1 B1 C1 A2 B2 C2 ……………… AN BN CN 输出格式: 能得到的资料总数 输入输出样例

codevs 2046 孪生素数 3 (水题日常)

时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 在质数的大家庭中,大小之差不超过2的两个质数称它俩为一对孪生素数,如2和3.3和5.17和19等等.请你统计一下,在不大于自然数N的质数中,孪生素数的对数. 输入描述 Input Description 只有一行,一个自然数N. 输出描述 Output Description 只有一行,一个整数,表示N以内孪生素数的对数. 样例输入 Sample Input 20 样例输出 Samp

2.4-?:转C++脑子康复水题训练

4/∞ 这里是日常的脑子康复转C++训练.真是失策啊把第一月计任务和转语言弄一起了 为了转语言刷的水题都羞耻于扔月计上凑数(这个坑用来装羞耻题 一样不放题目,需要的自行baidu.com --------------------- 1.蛇形填数 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #define MAXN 25 5 using namespace std; 6 int a[MAXN]

2015南阳CCPC L - Huatuo&#39;s Medicine 水题

L - Huatuo's Medicine Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Huatuo was a famous doctor. He use identical bottles to carry the medicine. There are different types of medicine. Huatuo put medicines into the bottles and chain these b

sdut 2841 Bit Problem (水题)

题目 贴这个题是因为看题解有更简单的方法, 我做的时候是直接算的, 也很简单. 贴一下题解吧: 如果一个整数不等于 0,那么该整数的二进制表示中至少有一位是 1. 这个题结果可以直接输出 x - (x&(x-1)); 因为x-1 之后二进制下,就是最右边的1变成了0, 最右边的1的 右边所有的0变成了1, 不影响最左边. 我的代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4

sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)

n a^o7 ! Time Limit: 1000MS Memory limit: 65536K 题目描述 All brave and intelligent fighters, next you will step into a distinctive battleground which is full of sweet and happiness. If you want to win the battle, you must do warm-up according to my inst