记录编号 589178 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 Florr 最终得分 100
用户昵称 Gravatarflyfree 是否通过 通过
代码语言 C++ 运行时间 0.996 s
提交时间 2024-07-03 17:02:34 内存使用 3.36 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100005
int n,m,k;
int l[MAXN],r[MAXN],c[MAXN],s[MAXN],used[MAXN],trn[MAXN];
int ansz[MAXN],ansn;
int dfs(int idx,int cnt,int root){
    int lock=s[r[idx]];
//    cout<<idx<<" "<<cnt << " "<<root<<" "<<lock<<endl;
    if(!lock){
        s[r[idx]]=idx;
        s[l[idx]]=0;
        used[idx]=1;
        swap(l[idx],r[idx]);
        ansz[++ansn]=idx;
        k--;
        return 1;
    }
    if(lock>=root||cnt+1>k||used[lock])return 0;
    int ans=dfs(lock,cnt+1,root);
    if(ans){
        s[r[idx]]=idx;
        s[l[idx]]=0;
        used[idx]=1;
        swap(l[idx],r[idx]);
        ansz[++ansn]=idx;
        k--;
        return 1;
    }else{
        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>>c[i];
    }    
    for(int i=1;i<=m;i++){
        cin>>l[i]>>r[i];
        s[l[i]]=i;
    }
    for(int i=m;i;i--){
//        cout<<c[l[i]]<<" "<<c[r[i]]<<endl;
        if((c[r[i]]>c[l[i]]||trn[l[i]])&&k&&!used[i]){
            trn[r[i]]=1;
//            cout<<i<<" "<<k<<endl;
            dfs(i,1,i);
        }else{
            trn[l[i]]=1;
        }
    }
    cout<<ansn<<endl;
    for(int i=1;i<=ansn;i++)cout<<ansz[i]<<endl;
    return 0;
}