补充一下,题目应该声明好,路径是单向的
查看原帖
补充一下,题目应该声明好,路径是单向的
403619
aigoHZ楼主2021/8/26 16:12

至于为什么,因为我用下面的仅适用单向路径的代码测试过了

要么就是缺条件,要么就是数据太水

#include <iostream>
#include <cstring>
using namespace std;

int w[210],n;
int e[200000],ne[200000],h[210],tot=1; //数组模拟邻接表储存边
//e表示指向,ne为下一条,h为首条
int f[210],nexts[210];

int maxf=0,maxwh=0;

void add(int a,int b){
    e[tot]=b; ne[tot]=h[a]; h[a]=tot++;
}

int main(){
    memset(h,0,sizeof(h));
    cin >> n;
    for(int i=1;i<=n;i++) cin >> w[i];
    //for(int i=1;i<=n;i++) cout << w[i] << " ";
    //cout << endl;
    for(int i=1;i<n;i++){
        for(int j=i+1;j<=n;j++){
            int a;
            cin >> a;
            if(a==1){
                //cout << i << " " << j << endl;
                add(i,j);
                //add(j,i);
            }
        }
    }
    for(int i=n;i>0;i--){
        f[i]=w[i];
        int maxs=0,nex=0;
        for(int s=h[i];s!=0;s=ne[s]){
            if(f[e[s]] > maxs){
                maxs=f[e[s]];
                nex=e[s];
            }
        }
        nexts[i]=nex;
        f[i]+=maxs;
        if(f[i]>maxf){
            maxf=f[i];
            maxwh=i;
        }
    }
    for(int i=maxwh;i>0;i=nexts[i]){
        cout << i;
        if(nexts[i]>0) cout << " ";
    }
    cout << endl<<maxf;

    return 0;
}

而且根据当年的原题??也是说路径是单向的啊!

2021/8/26 16:12
加载中...