「已注销」 2023-04-02 20:19 采纳率: 90.2%
浏览 13
已结题

C++图论基础题DP

洛谷原题:https://www.luogu.com.cn/problem/P1113
图论,我的思路是用vector[]存图,vector[i]表示序号为i的任务,vector[i][0]表示第i的任务所需的时间,vector[i][j](j从2开始)表示第i的任务的前驱任务
然后遍历vecotr[i][2~...]记录最大值前驱任务下标,最后用累加(sum[i]记录完成第i个任务所需的时间)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

int n,a,b,sum[10005];
vector<int>c[10005];

int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a>>b;
        c[a].push_back(b);
        while(cin>>b&&b){
        c[a].push_back(b);
        }
    }
    sum[1]=c[1][0];
    for(int i=2;i<=n;i++){
        int ans=i-1;
        for(int j=1;j<c[i].size()-1;j++)ans=max(ans,c[i][j]);
        sum[i]=sum[ans]+c[i][0];
    }
    cout<<sum[n];
    return 0;
} 

  • 写回答

1条回答 默认 最新

  • 肩匣与橘 游戏开发领域新星创作者 2023-04-03 12:18
    关注
    
    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    const int N = 10010;
    int f[N];
    int time1[N];
    vector<int> a[N];
    int dfs(int x) {
        if (f[x]) return f[x];//该节点已经遍历过了,减枝
        for (int i = 0; i < a[x].size(); i++) {
            f[x] = max(f[x], dfs(a[x][i])); //说有子集中最大的节点
        }
        f[x] += time1[x]; // 加上自己需要的时间
        return f[x];
    }
    int main() {
        
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) {
            int x, y,z;
            cin >> x >> y >> z;
            time1[x] = y;
            while(z != 0){
                a[z].push_back(x);// 只有完成z 后才能完成 x 所以有z -> x的边
                scanf("%d", &z);
            }
        }
     
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            ans = max(ans, dfs(i));
        }
        cout << ans<<endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: