40
查看原帖
40
1057034
Dark_into_Lie楼主2024/8/13 16:26
#include<bits/stdc++.h>
using namespace std;
const int N = 205;

struct node{
    int v,pre,num;
}f[N];

int a[N],res[N],cur;
int h[N],e[N],ne[N],idx;

void add(int u,int v){
    e[idx] = u,ne[idx] = h[v],h[v] = idx++;
}

int main(){
    memset(h,-1,sizeof(h));
    int n,ans = 0;
    cin >> n;
    for(int i = 1;i <= n;i++) cin >> a[i];
    int x,y;
    while(cin >> x){
        cin >> y;
        if(x == 0 && y == 0) break;
        if(x == y) continue;
        add(x,y);
    }
    for(int i = 1;i <= n;i++) f[i].pre = -1;
    for(int i = 1;i <= n;i++) f[i].num = 1;
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++) f[j].v = 0;
        f[i].v = a[i];
        for(int j = 1;j <= n;j++){
            for(int k = h[j];~k;k = ne[k]){
                int v1 = e[k];
                if(f[v1].v + a[j] > f[j].v){
                    f[j].v = f[v1].v + a[j];
                    f[j].pre = v1;
                    f[j].num++;
                }
            }
        }
        for(int j = 1;j <= n;j++){
           if(f[j].v > ans){
               ans = f[j].v;
               int index = j,cnt = f[j].num;
               while(index != -1){
                   res[cnt--] = index;
                   index = f[index].pre;
               }
               cur = f[j].num;
           }
        }
    }
    for(int i = 1;i <= cur;i++){
        if(i == cur) cout << res[i];
        else cout << res[i] << '-';
    }
    cout << '\n';
    cout << ans << '\n';
    return 0;
}
2024/8/13 16:26
加载中...