比赛 2024暑期C班集训3 评测结果 WAAATTTTTTTTEEEEEEEE
题目名称 Florr 最终得分 15
用户昵称 wdsjl 运行时间 9.506 s
代码语言 C++ 内存使用 4.68 MiB
提交时间 2024-07-03 11:30:18
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

const int N = 3010;

long long flag,used[N],res_i,n,m,k,c[N],a[N],b[N],s[N];
__int128 res;

void dfs(int idx){
    if(idx>k){
        return ;
    }
    __int128 cnt=0;
    for(int i=1;i<=m;i++){
        cnt+=c[a[i]]*pow(n,i);
    }
    if(cnt>res){
        res_i=idx;
        res=cnt;
    }
    for(int i=1;i<=m;i++){
        if(!used[i]){
            int boo=0;
            for(int j=1;j<=m;j++){
                if(j==i)continue;
                if(a[j]==b[i]){
                    boo=1;
                    break;
                }
            }
            if(boo==0){
                swap(a[i],b[i]);
                used[i]++;
                dfs(idx+1);
                swap(a[i],b[i]);
                used[i]--;
            }
        }
    }
}

void dfss(int idx){
    if(idx>k){
        return ;
    }
    __int128 cnt=0;
    for(int i=1;i<=m;i++){
        cnt+=c[a[i]]*pow(n,i);
    }
    if(cnt==res){
        flag==1;
        for(int i=1;i<=res_i;i++)cout<<s[i]<<endl;
//        cout<<endl;
//        cout<<"YYY"<<endl; 
        return;
    }
    for(int i=1;i<=m;i++){
        if(!used[i]){
            int boo=0;
            for(int j=1;j<=m;j++){
                if(j==i)continue;
                if(a[j]==b[i]){
                    boo=1;
                    break;
                }
            }
            if(boo==0){
                swap(a[i],b[i]);
                used[i]++;
                s[idx+1]=i;
                dfss(idx+1);
//                cout<<flag<<endl;
                if(flag==1)printf("%d\n",i);
                swap(a[i],b[i]);
                used[i]--;
            }
        }
    }
}

int main(){
    freopen("Florr.in","r",stdin);
    freopen("Florr.out","w",stdout);
    scanf("%lld%lld%lld",&n,&m,&k);
    for(int i=1;i<=n;i++)scanf("%lld",&c[i]);
    for(int i=1;i<=m;i++){
        scanf("%lld%lld",&a[i],&b[i]);
    }
    dfs(0);
    printf("%lld\n",res_i);
    dfss(0);
    return 0;
}