poj1949 DAG 最长路

来源:互联网 发布:视频打马赛克软件 编辑:程序博客网 时间:2024/05/01 22:04

之前学了 最长路 写了 嵌套矩形 今天想照搬 但是不对 1 已经拓扑排序了 起点就是0 想遍历 居然还是从1开始了 傻,2 建图没把0和1的有向边加进去

#include <iostream>#include <cstdio>#include <cstring>#include <climits>#include <vector>using namespace std;int a[10001],d[10001],n;vector<int> b[10001];int MAX(int x,int y){    return x>y?x:y;}int solve(int i){    if(d[i]>0)        return d[i];    d[i] = a[i];    for(int j=0;j<b[i].size();++j)        d[i] = MAX(d[i],a[i]+solve(b[i][j]));    return d[i];}int main(){    scanf("%d",&n);    int x,temp;    memset(b,0,sizeof(b));    memset(d,0,sizeof(d));    for(int i=0;i<=n;++i)        b[i].clear();    for(int i=1;i<=n;++i)    {        scanf("%d",&a[i]);        scanf("%d",&x);        if(x==0)        {            b[0].push_back(i);            continue;        }        for(int j=0;j<x;++j)        {            scanf("%d",&temp);            b[temp].push_back(i);        }    }    <span style="white-space:pre">            /*solve(1);                int maxn=INT_MIN;                for(int i=1;i<=n;++i)                    maxn=MAX(maxn,d[i]);                printf("%d\n",maxn);*/    printf("%d",solve(0));</span>    return 0;}


0 0