比赛 |
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;
}