比赛 2024暑期C班集训3 评测结果 WAWWTTTTTTTTEEEEEEEE
题目名称 Florr 最终得分 5
用户昵称 flyfree 运行时间 9.493 s
代码语言 C++ 内存使用 4.66 MiB
提交时间 2024-07-03 10:08:24
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,k,idx;
int x[3005],l[3005],r[3005],used[3005],qt[3005];
ll ans;
void dfs1(int i,ll ansn,int f,ll ni){
//    cout<<i<<" "<<ansn<<" "<<f<<endl;
    if(i>m){
        ans=max(ans,ansn);
        return;
    }
    if(!used[l[i]]){
        used[l[i]]=1;
        dfs1(i+1,ansn+x[l[i]]*ni,f,ni*n);
        used[l[i]]=0;
    }
    if(!used[r[i]]&&f<k){
        used[r[i]]=1;
        dfs1(i+1,ansn+x[r[i]]*ni,f+1,ni*n);
        used[r[i]]=0;
    }
}
int dfs2(int i,ll ansn,int f,ll ni){
//    cout<<i<<" "<<ansn<<" "<<f<<endl;
    if(i>m){
        if(ansn==ans)return 1;
        else return 0;
    }
    if(!used[l[i]]){
        used[l[i]]=1;
//        cout<<"l "; 
        if(dfs2(i+1,ansn+x[l[i]]*ni,f,ni*n)){
            return 1;
//        used[l[i]]=0;
        }
        used[l[i]]=0;
    }
    if(!used[r[i]]&&f<k){
        used[r[i]]=1;
//        cout<<"r ";
        if(dfs2(i+1,ansn+x[r[i]]*ni,f+1,ni*n)){
            qt[++idx]=i;
//            cout<<i<<endl;
//        used[r[i]]=0;
            return 1;
        }
        used[r[i]]=0;
    }
    return 0;
}
int main(){
    freopen("Florr.in","r",stdin);
    freopen("Florr.out","w",stdout);
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++){
        cin>>x[i];
    }
    for(int i=1;i<=m;i++){
        cin>>l[i]>>r[i];
    }
    dfs1(1,0,0,n);
//    cout<<ans; 
    memset(used,0,sizeof(used));
    dfs2(1,0,0,n);
    cout<<idx;
    for(int i=1;i<=idx;i++)cout<<endl<<qt[i];
    return 0;
}